我正在使用这个非常简单的bash脚本:

#!/bin/bash
CMD="sed -e 's/test/abz/' <test >test_res"
echo $CMD
$CMD

当我运行脚本时,会得到以下输出:
sed -e 's/test/abz/' <test >test_res
sed: -e expression #1, char 1: unknown command: `''

如果我在命令行(而不是bash脚本中)运行完全相同的命令(sed-e's/test/abz/'test_res),它就可以正常工作。
我做错什么了?任何帮助都非常感谢。

最佳答案

不要将参数存储在单个变量中,因为分词会逐字解释其中的引号。快速破解方法是使用eval,但不建议:

CMD="sed -e 's/test/abz/' <test >test_res"
eval "$CMD"

可以使用数组,但只能使用参数,而不包括重定向:
CMD=(sed -e 's/test/abz/')
"$CMD[@]}" <test >test_res

至于错误sed: -e expression #1, char 1: unknown command: `'',这只是因为您的命令扩展为:
sed -e "'s/test/abz/'" "<test" ">test_res"

关于linux - bash脚本中的Linux sed,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25126235/

10-14 18:34
查看更多