双引号命令替换是一种好习惯。流程替换(<()
和>()
)是否相同?
似乎双引号允许命令替换,但不允许进程替换:
$ echo <(printf "%s" hello)
/dev/fd/63
$ echo "<(printf "%s" hello)"
<(printf %s hello)
如果任何进程替换的结果都包含空格,或者该空格永远不会发生,该怎么办?
谢谢。
琐碎测试表明,报价流程替代将抑制它:
$ echo <(echo 123)
/dev/fd/63
$ cat <(echo 123)
123
$ echo "<(echo 123)"
<(echo 123)
$ cat "<(echo 123)"
cat: '<(echo 123)': No such file or directory
对我来说,您在提出问题之前没有尝试过这样做是很奇怪的,但是现在至少可以很容易地验证它是行不通的。
这与引用其他shell运算符时发生的情况没有什么不同。echo "("
出于相同的原因不是语法错误,也不echo "> /dev/sda"
会给您带来任何问题。
该记录的行为是:
作为扩展的结果,该文件名作为参数传递给当前命令
作为一个单独的论据,是否存在空格并不重要,并且单词拆分并不重要,也不会执行。在某些平台上,在生成的路径中出现空白是合理的,但这不会产生任何影响。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句