拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Shell脚本:单引号转义

Shell脚本:单引号转义

白鹭 - 2022-03-02 2102 0 0

我有以下(部分)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)。

由于<<\EOFand#标记出现在单引号部分中,它们根本没有语法意义;它们只是文字字符,将test_expect_success作为自变量的一部分传递给在单引号字符串中,唯一具有任何语法意义的东西是单引号(它只是表示单引号部分的结尾)。

您可以通过将test_expect_success命令替换为 来查看结果printf '[%s]\n',并查看[ ]标记内打印的内容

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *