Shell:如何处理在shell脚本

时间:2016-12-07 13:01:26

标签: bash shell

我有一个像这样的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或其他有线字符,这使得脚本无法执行(即使我已经用“”包装它)。有没有办法忽略这些角色?

1 个答案:

答案 0 :(得分:5)

在shell脚本中循环所有输入参数时,应始终使用"$@"。不是$*,不是$@,而不是"$*"。只有"$@"才能正确处理所有输入字符串。

P.S。:始终使用set -eset -o pipefail启动您的脚本。然后,您的脚本将在第一个错误时停止,而不是使用未经测试的行为进行狂放。