echo 'hello' vs echo “hello” vs echo hello,我应该在 Bash 脚本中使用哪个?[复制]

echo 'hello' vs echo "hello" vs echo hello, which should I use in a Bash script? [duplicate]

提问人:m615 提问时间:11/14/2023 更新时间:11/21/2023 访问量:84

问:

这个问题在这里已经有答案了:
8天前关闭。

截至 8 天前,社区正在审查是否重新打开此问题。

编写 echo 命令时,我应该在 {“”, '',} 中使用哪些字符?

明显地:

echo hello
echo "hello"
echo 'hello'

这三个都不会产生错误并执行它们应该做的事情,但我想知道哪一个是正确的。

Linux Bash 外壳 UNIX 回声

评论

1赞 ensc 11/14/2023
printf "%s\n" "hello";)对于您的示例来说,这取决于个人喜好并不重要。但是,当您想要扩展变量时,会有所不同。
0赞 pmf 11/14/2023
同样值得一读: mywiki.wooledge.org/Quotes
1赞 Ed Morton 11/14/2023
始终在每个字符串或脚本周围使用单引号,除非您需要双引号(例如,让变量(例如,让变量(如 expand)或不使用引号(例如,让通配符(如 expand)扩展到文件列表)。然后尝试。"$PWD"*echo '$PWD *'echo "$PWD *"echo $PWD *
0赞 Charles Duffy 11/14/2023
我刚刚分配了一个变量,但 echo $variable 显示了其他内容!与这种区别很重要的地方非常相关(而在不重要的情况下,你实际上没有遇到一个狭隘的、具体的问题,所以这个问题是题外话)。
1赞 Charles Duffy 11/14/2023
Unix 和 Linux 问题 Why is printf better than echo?(为什么 printf 比 echo 更好?)也可能与阅读本文的人相关,因为 Stephane 的出色回答详细介绍了行为定义不足、不可靠或不可移植的方面——如果有人想要了解其行为的细节,这一点很重要。echo

答:

1赞 Doncho Gunchev 11/14/2023 #1

所有用法都是正确的。必须引用具有空格的参数。例如

echo 'Hello  there'

不能不带引号,无论是单引号还是双引号,或者转义(见下文)。单引号和双引号之间的主要区别在于变量的处理。例:

w='World'
echo "Hello $w."

第二行需要双引号,否则不会打印“Hello World.”,而是“Hello $w.”。HTH。

PS:你也可以在shell中转义空格,像这样:

echo Hello\ \ there

并将留下下一个供您猜测它是如何工作的:

echo Hello\  there
1赞 Antonio Petricca 11/14/2023 #2

echo hello适用于无空间方案,但这不是一个好的做法。

echo "hello"允许您扩展变量。例如:

V="Hello Guy!"

echo "MyVar: ${V}"

它产生:

MyVar: Hello Guy!

相反,不会展开变量。例如,后一个示例生成:echo 'hello

MyVar: ${V}