cod*_*lic 11 bash shell escape-characters csh
例如 我想说
perl -e 'print '"'"'Hello, world!'"'"', "\n";'
Run Code Online (Sandbox Code Playgroud)
有没有一种不那么尴尬的方法,例如转义单引号?
是的,我知道我可以写
perl -e 'print q[Hello, world!], "\n"'
perl -e 'print "Hello, world!\n"'
Run Code Online (Sandbox Code Playgroud)
但是这个问题是关于在 shell 中引用,而不是在 Perl 中引用。
我感兴趣的是如何做到这一点的bash,并csh摆在首位。
丹尼斯在他的回答中指出了通常的替代方案(单双、单双、单引号字符串与转义单引号连接;您已经提到 Perl 的可自定义引号运算符),但也许这就是您正在寻找的直接答案为了。
在类似 Bourne 的 shell(sh、ksh、ash、dash、bash、zsh 等)中,单引号字符串完全是文字。这使得包含 shell 将要特别处理的字符变得容易,而不必对它们进行转义,但这确实意味着单引号字符本身不能包含在单引号字符串中。
我什至拒绝考虑 csh 类型的 shell,因为它们在其他方面完全被破坏(参见Csh 编程被认为有害)。
对我来说,你所有的例子都会产生:
你好,世界!
这样做也是如此:
perl -e 'print "Hello, world!", "\n";'
Run Code Online (Sandbox Code Playgroud)
和这个:
perl -e 'print '\''Hello, world!'\'', "\n";'
Run Code Online (Sandbox Code Playgroud)
你能澄清一下你想要做什么吗?
在 shell 中,例如 Bash,如果您想将引号作为字符串的一部分打印出来,一种类型的引号会转义另一种类型。
$ echo '"Hello, world!"'
"Hello, world!"
$ echo "'Hello, world!'"
'Hello, world!'
Run Code Online (Sandbox Code Playgroud)
编辑:
这是另一种方式:
$ perl -e 'print "\047Hello, world!\047", "\n";'
'Hello, world!'
$ echo -e "\047Hello, world! \047"
'Hello, world! '
Run Code Online (Sandbox Code Playgroud)
感叹号后的空格避免了历史扩展错误。我本来可以这样做的set +H。
| 归档时间: |
|
| 查看次数: |
24326 次 |
| 最近记录: |