我有以下(部分)shell脚本(内部t7508-status.sh
):
test_expect_success 'status --column' '
cat >expect <<\EOF &&
# On branch main
# Your branch and '\''upstream'\'' have diverged,
# and have 1 and 2 different commits each, respectively.
# (use "git pull" to merge the remote branch into yours)
#
# Changes to be committed:
# (use "git restore --staged <file>..." to unstage)
# new file: dir2/added
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git restore <file>..." to discard changes in working directory)
# modified: dir1/modified
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
# dir1/untracked dir2/untracked
# dir2/modified untracked
#
EOF
COLUMNS=50 git -c status.displayCommentPrefix=true status --column="column dense" >output &&
test_cmp expect output
'
好的,第一个参考的部分似乎很明显status --column
,但是第二个参考的部分从第一行的末尾开始,恕我直言,在第三行结束
# Your branch and '\''upstream'\'' have diverged,
^--here
然后一个转义的参考后面跟着一个新的参考部分?还是<<\EOF ... EOF
优先级更高?我提出问题的原因是使用 ANTLR 创建正确的语法着色。
uj5u.com热心网友回复:
你是对的:第一个参考的部分在第三行结束,紧接着是一个转义的单引号,然后是另一个单引号部分。然后同样的事情在 8 个字符之后再次发生。由于这些部分之间没有空格或其他分隔符,因此它们被视为单个长字符串的一部分( 的自变量test_expect_success
)。
由于<<\EOF
and#
标记出现在单引号部分中,它们根本没有语法意义;它们只是文字字符,将test_expect_success
作为自变量的一部分传递给。在单引号字符串中,唯一具有任何语法意义的东西是单引号(它只是表示单引号部分的结尾)。
您可以通过将test_expect_success
命令替换为 来查看结果printf '[%s]\n'
,并查看[ ]
标记内打印的内容。
0 评论