我试图在这样的变量中存储sed命令的开头:
sedcmd="sed -i '' "
稍后我会执行如下命令:
$sedcmd s/$orig_pkg/$package_name/g $f
它不起作用。使用bash -x运行脚本,我可以看到它正在扩展,如:
sed -i ''\'''\'''
表达这个的正确方法是什么?
答案 0 :(得分:3)
定义shell函数:
mysed () {
sed -i "" "$@"
}
并将其称为:
$ mysed s/$orig_pkg/$package_name/g $f
答案 1 :(得分:2)
当命令只有一个字长时,它可以工作:
$ LS=ls
$ $LS
但是在你的情况下,shell正在尝试执行不存在的程序 sed -i ''
。
解决方法是使用$SHELL -c
:
$ $SHELL -c "$LS"
total 0
(而不是$SHELL
,你也可以说bash
,但是当有多个Bash安装时,这并不完全可靠,shell实际上不是Bash等。)
但是,在大多数情况下,我实际上使用的是shell函数:
sedcmd () {
sed -i '' "$@"
}
答案 2 :(得分:0)
为什么不使用别名或功能?你可以做别名
alias sedcmd="sed -i '' "
答案 3 :(得分:0)
这是做正确的方法
alias sedcmd="sed -i ''"
显然请记住,当你关闭你的bash时,这个别名就会消失
如果您想将其设为“永久”,则必须将其添加到.bashrc
主文件(如果您只想为单个用户创建)或.bashrc
全局文件,如果您愿意使其可供所有用户使用
答案 4 :(得分:0)
不完全确定你要做什么,但我的建议是:
sedcmd="sed -i "
$sedcmd s/$orig_pkg/$package_name/g $f
您必须先在shell中设置变量orig_pkg
package_name
和f
。
如果您要替换文件中的变量名称,请尝试:
$sedcmd s/\$orig_pkg/\$package_name/g $f
必须将f
设置为您正在处理的文件名。