what is the difference between $1 and “$1” in bash script?
本问题已经有最佳答案,请猛点这里访问。
例子
1 2 3 4 | while [ -n"$1" ] do something done |
我可以写
1 2 3 4 5 6 | $ var="two words" $ function num_args() { echo"${#}"; } $ num_args $var 2 $ num_args"$var" 1 |
$A和"$A"之间的区别在于如何处理分词,以便将参数传递给程序和函数。
想象一下在文件上工作的脚本(比如移动它们):
1 | $ cat my-move |
1 2 3 4 5 6 7 8 9 | #! /bin/sh # my-move src=${1} dst=${2} # ... do some fancy business logic here mv ${src} ${dst} |
1 | $ my-move"some file" other/path |
现在的代码(没有引号)显示,此脚本已损坏,因为它无法正确处理包含空格的文件路径。
(感谢@charlesduffy)
另外,在处理全局模式时引用事项:
1 2 3 4 5 | $ var='*' $ num_args"$var" 1 $ num_args $var 60 |
或:
1 2 3 4 5 6 | $ shopt -s failglob $ var='[name]-with-brackets' $ echo $var bash: no match: [name]-with-brackets $ echo"$var" [name]-with-brackets |
引号可以用来对参数进行分组,而不管是否存在空格或其他特殊字符。通过演示,这里有一个案例,两个案例在本质上是不同的:
1 2 3 4 5 | $ foo="bar baz" $ sh -c 'echo $1' worker $foo bar $ sh -c 'echo $1' worker"$foo" bar baz |
在上面的例子中,我们传递没有引号的
因此,虽然您可以编写一个不带引号的变量(例如