2016-12-07 25 views
1

我有一个shell脚本是这样的:壳牌:如何处理包含文件名` N`或``在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 5月包含\n或其他有线字符,这使脚本无法执行(即使我已经用“”包装了它)。有什么办法可以忽略这些角色吗?

回答

5

当循环访问shell脚本中的所有输入参数时,应始终使用"[email protected]"。不是$*,而不是[email protected],而不是"$*"。只有"[email protected]"才能完全正确处理所有输入字符串。

P.S .:总是用set -e和可能set -o pipefail开始您的脚本。然后,您的脚本将停止第一个错误,而不是在未经测试的行为下运行。

+0

谢谢!但无论如何要处理包含'\ n'或其他有线字符的文件名? – MrROY

+0

@MrROY:试试吧。我想你会发现它的工作原理。 –

+1

是的,迭代“$ @”可以正确处理所有名称。 – choroba