我想用sed替换bash脚本中的多个文件。
当我从bash中调用它时,我得到以下错误
DEBUG FLOW: -
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
与终端和脚本的区别在于文件周围的引号。
我已经尝试定义没有引号的文件列表变量
请建议
答案 0 :(得分: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
错误。