Answers:
Dennis在他的答案中指出了通常的选择(单双,双单,单引号字符串与转义的单引号连接;您已经提到了Perl的可定制引号运算符),但这也许就是您正在寻找的直接答案对于。
在类似Bourne的shell(sh,ksh,ash,dash,bash,zsh等)中,单引号字符串完全是字面量。这样可以很容易地包含一些字符,而这些字符本来可以在无需转义的情况下进行特殊处理,但这确实意味着单引号字符本身不能包含在单引号字符串中。
我什至拒绝考虑csh类型的shell,因为它们在其他方面完全被破坏了(请参阅Csh编程被认为有害)。
blah <<\EOF … EOF
。您也可以使用<<'EOF'
和<<"EOF
。它们都意味着此处的文字(与Perl不同)。如果您确实有决心,则可以执行此操作blah "$(cat<<\EOF … EOF )" other args
(使用换行符,我在命令替换处写了空格; ksh和zsh可以在没有cat的情况下运行,其他人则需要它)。但这真的值得吗?
echo '\U0000068\U000069'
“ hi”。不知道为什么,除非它是外壳程序中的错误。
\U
在这种情况下,解释是通过内置的echo命令完成的(此行为可以通过-E
或BSD_ECHO选项和来控制-e
)。您可以看到文字字符串是在其他命令中传递的(而不是以其他方式解释的)。例如printf %s\\n '\U0000068\U000069'
。
对我来说,所有示例都产生了:
你好,世界!
这样做也是这样:
perl -e 'print "Hello, world!", "\n";'
和这个:
perl -e 'print '\''Hello, world!'\'', "\n";'
您能说明您要做什么吗?
在外壳(例如Bash)中,如果要在字符串中打印引号,则一种引号会转义另一种。
$ echo '"Hello, world!"'
"Hello, world!"
$ echo "'Hello, world!'"
'Hello, world!'
编辑:
这是另一种方式:
$ perl -e 'print "\047Hello, world!\047", "\n";'
'Hello, world!'
$ echo -e "\047Hello, world! \047"
'Hello, world! '
感叹号后的空间避免了历史扩展错误。我本来可以做的set +H
。
这里的文档是不关心转义的最佳方法:
$ cat <<EOF
my $var = "Hello";
print $text, ', world!', "\n";'
EOF
您可以使用此处引用的文件完全承担全部责任:
$ cat <<'EOF'
my $var = "Hello";
print $text, ', world!', "\n";'
EOF
如果要将其作为参数而不是输入传递,则可以使用xargs:
$ xargs -0 <<'EOF' perl -e
my $var = "Hello";
print $text, ', world!', "\n";'
EOF
我不知道是否有在bash中执行此操作的选项,但是使用zsh可以''
在启用该RC_QUOTES
选项后使用。(我建议尝试使用zsh;它主要与bash兼容,并且可以模拟bash以获得更大的兼容性。)
使用bash(大多数情况下仍使用zsh),我只是使用'\''
它,因为它比容易阅读'"'"'
。
我完全不知道如何在csh中执行此操作。
如果在内部将Perl用作Perl脚本的一部分,则可以使用\'和\“来对perl进行引号转义。我不确定命令行是否会接受。您可以尝试一下,看看它是否有效。