我遇到了一个小脚本:
$ for i in *.sh; do echo "$i"; done
name with space.sh
name_with_dash.sh
当我取消引用$i
时,它会产生相同的结果。
$ for i in *.sh; do echo $i; done
name with space.sh
name_with_dash.sh
我可以看到"$i"
,test [ ]
或cd
等老式命令可能需要引用rm
。是否有必要使用echo
的引号?
答案 0 :(得分:5)
如果文件名包含多个连续的空格,您会看到不同之处:
geo fix
使用引号会正确回显:
touch "name with multiple spaces.sh"
如果没有引号,它将组合所有空格,显示不正确的文件名:
name with multiple spaces.sh
引号阻止了分词,它将变量扩展的结果解析为由空格分隔的单词(您可以通过设置name with multiple spaces.sh
变量来更改分隔符字符。)
如果你总是引用你的变量,你很少会出错。当你明确需要单词拆分或通配符扩展时,你应该只使用变量unquoted。