在bash脚本中,当输入行包含起始评论标记/ *时,它会被评估为根目录“/”中的所有条目。我们如何避免这种情况?如何避免“/ *”替代bash脚本根目录中的文件/目录?
编辑:代码在更可读的形式评论:
在bash脚本中,当输入行包含起始评论标记/ *时,它会被评估为根目录“/”中的所有条目。我们如何避免这种情况?如何避免“/ *”替代bash脚本根目录中的文件/目录?
编辑:代码在更可读的形式评论:
你可以告诉庆典做文件展开时忽略某些模式:
$ export GLOBIGNORE='/*'
$ ls /* | wc
ls: cannot access /*: No such file or directory
0 0 0
,或者你可以完全禁用路径扩展使用设置内建:set -f
谢谢,它工作正常。 – user693986 2011-04-06 01:48:16
每当你使用一个变量而不把它放在双引号中,它的值在被子进行分析后有几种方式取而代之:它被分解成“单词”,通配符得到扩展。在你的情况,该行:
aaa=`echo -e $line`
是造成麻烦,因为附近有$line
无报价 - 它会扩展通配符,转换的空格,制表符等字符串转换为单个空格,也许一些其他的东西我虽然没有。顺便说一句,read line
将修剪前导空白和尾随空格,并连接以反斜杠结尾的行;如果你不想要这个,请改用IFS= read -r line
。最后,两次使用echo -e
将导致输入文件中转义序列的双重解释。这是我推荐的重写:
while IFS= read -r line; do
echo -e "input line: [$line]"
aaa=$(echo -e "$line")
echo "aaa=$aaa"
done < "$infile"
在bash脚本中,起始注释标记是'#',而不是'/ *'。 – davmac 2011-04-06 01:09:21
在读取行时发布代码 – SiegeX 2011-04-06 01:10:31
的snippit;做 echo -e“input line:[$ line]” aaa ='echo -e $ line' echo -e“aaa = $ aaa” done <$ infile – user693986 2011-04-06 01:38:29