我有一个像这样的shell脚本:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "Use: "$0" <file_name>"
echo "Convert files from GBK to UTF8"
exit
fi
for i in $*
# Generate temp file to avoid Bus error
iconv -f GBK -t utf-8 "$i" -o "$i.tmp"
mv "$i.tmp" "$i"
done
问题是$i
可能包含\n
,或其他有线字符,这使得脚本无法执行(即使我已经用“”包装它)。有没有办法忽略这些角色?
答案 0 :(得分:5)
在shell脚本中循环所有输入参数时,应始终使用"$@"
。不是$*
,不是$@
,而不是"$*"
。只有"$@"
才能正确处理所有输入字符串。
P.S。:始终使用set -e
和set -o pipefail
启动您的脚本。然后,您的脚本将在第一个错误时停止,而不是使用未经测试的行为进行狂放。