我使用以下命令替换/opt/jboss/QueueStandalone/cron
文件夹中所有.sh
文件的文件名:
find /opt/jboss/QueueStandalone/cron -name '*.sh' -exec sed -i -e 's/Old-name/New-name/g' {} \;
我的问题是我很乐意构建一个 shell 脚本,就像它需要备份所有文件一样,.sh
然后使用以下选项
Old-name=
New-name=
如果我使用脚本输入这两个值,则需要在所有.sh
文件中进行更改。
答案1
Shell 变量名称不得包含破折号。
old_name="foo"
new_name="bar"
sed -i -e "s/${old_name}/${new_name}/g"
但请确保旧名称和新名称不包含任何可以解释的内容sed
(例如点...)。或者你必须转义这些字符:
old_name="foo\.sh"
new_name="bar.sh"
但整个方法对我来说似乎很奇怪。通常您会将参数传递给脚本并像这样调用它
/path/to/script "$old_name" "$new_name"
或者
OLD_NAME=foo NEW_NAME=bar /path/to/script