【发布时间】:2021-02-06 15:54:58
【问题描述】:
我有以下代码可以在 MacOS 上完美运行,但不能在 GNU 上运行(我正在使用 MinGW):
filename=$1
iter_count=$((${#src_op_lst[@]} -1))
for i in $(eval echo "{0..$iter_count}");do
echo "Checking File :" $filename
sed -i "" "s/[[:<:]]"${src_op_lst[$i]}"[[:>:]]/"${tgt_op_lst[$i]}"/g" $filename
done
我猜原因是 sed 语法不同,但我不知道如何让它在 GNU 上工作。我尝试使用sed -i -e ...,但 sed 给了我以下错误:-e expression #1, char 50: Invalid character class name。
我是 bash 脚本的新手,如果这个问题很愚蠢,请原谅。任何帮助将不胜感激!
【问题讨论】:
-
[[:<:]]/[[:>:]]是有问题的标记。你想在这里做什么?它们被解析为命名字符类,例如[[:alnum:]],字母数字字符的类 -
[[:<:]]确实是无效的 char 类名。你想用it做什么? -
@Aaron @vgersh99 此脚本将
filename中的src_op_lst中的所有值替换为tgt_op_lst中的相应值 -
看来我的猜测是正确的:unix.stackexchange.com/a/393968/139867。我会发布答案
-
哦,如果您不知道,ShellCheck 是一个很好的工具,可以帮助您查明脚本中的问题和不良做法。