首页 > 解决方案 > 将命令放在单引号中是否对 bash 脚本有任何影响?

问题描述

我偶然发现了一个脚本,作者将每个外部命令(不是内置命令或函数)都放在单引号中。由于我以前从未见过这种编码风格,所以我想知道以下两个示例之间有什么区别:

'cat' $myfile

对比

cat $myfile

请忽略作者选择不引用保存文件名的变量这一事实。我肯定会把它放在双引号中,并且我知道引号对变量的影响。我只是对命令周围的引号是否有任何影响感兴趣。这两个示例都可以正常工作,但我的理解是单引号在这里是多余的。那是对的吗?

谢谢!

标签: bashshellquotes

解决方案


是的,它有效果,但主要是出于一个非常神秘的原因:

考虑一下这个奇怪的结构

alias cat='echo x'
cat foo # would output x foo
'cat' foo # Would output the content of the file foo

将其放在引号内会导致 bash 不运行别名。也可以通过

command cat foo # Also outputs the file foo

不同之处在于,将命令放在引号中只会跳过别名定义,而 usingcommand也会跳过函数定义。由于脚本中通常不启用别名,因此很少使用引号。


推荐阅读