繁体   English   中英

bash脚本中的Linux sed

[英]Linux sed in bash script

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

如果我在cmd行(不在bash脚本中)运行完全相同的cmd(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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM