0

我想使用 sed 替换 bash 脚本中的多个文件。

当我从 bash 调用它时,我得到以下错误

调试流程:-

FILELIST='/tmp/components/ab.sql /tmp/b.sql'
+ SUBSTITUTE_STRING=abc
+ sed -i.bak -e s/abc/xyz/g '/tmp/components/ab.sql /tmp/b.sql': No such file or directory

但是,当我直接在终端上使用此命令时,它会成功执行

sed -i.bak -e s/abc/xyz/g /tmp/components/ab.sql /tmp/b.sql

终端和脚本的区别在于文件周围的引号。

我也尝试过定义不带引号的文件列表变量

请建议

4

1 回答 1

1

而不是说:

FILELIST='/tmp/components/ab.sql /tmp/b.sql'

通过说使它成为一个数组:

FILELIST=(/tmp/components/ab.sql /tmp/b.sql)

并在调用时说:

sed -i.bak -e "s/abc/xyz/g" "${FILELIST[@]}"

如果您查看调试流程,很明显 shell 将文件名解析为单个标记 ( '/tmp/components/ab.sql /tmp/b.sql'),这会导致No such file or directory错误。

于 2013-11-14T09:52:41.743 回答