命令echo

时间:2018-04-12 00:15:03

标签: bash

我遇到了一个小脚本:

$ 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的引号?

1 个答案:

答案 0 :(得分:5)

如果文件名包含多个连续的空格,您会看到不同之处:

geo fix

使用引号会正确回显:

touch "name with   multiple spaces.sh"

如果没有引号,它将组合所有空格,显示不正确的文件名:

name with   multiple spaces.sh

引号阻止了分词,它将变量扩展的结果解析为由空格分隔的单词(您可以通过设置name with multiple spaces.sh 变量来更改分隔符字符。)

如果你总是引用你的变量,你很少会出错。当你明确需要单词拆分或通配符扩展时,你应该只使用变量unquoted。