我正在使用这个非常简单的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/