Linux 如何在bash函数中保留引号?
函数foo在.bashrc中导出Linux 如何在bash函数中保留引号?,linux,bash,Linux,Bash,函数foo在.bashrc中导出 foo() { echo "run '$@'" $@ } export -f foo 工作 不起作用 foo cmake -G "Unix Makefiles" -DARCHITECTURE_TYPE=armv7_32 run 'cmake -G Unix Makefiles -DARCHITECTURE_TYPE=armv7_32' CMake Error: Could not create named generator Unix ...
foo()
{
echo "run '$@'"
$@
}
export -f foo
工作
不起作用
foo cmake -G "Unix Makefiles" -DARCHITECTURE_TYPE=armv7_32
run 'cmake -G Unix Makefiles -DARCHITECTURE_TYPE=armv7_32'
CMake Error: Could not create named generator Unix
...
没有理由使用$@
无引号;否则它与$*
相同
foo () {
# including $@ in a longer quoted string can cause some
# weird side effects; I just use $* instead.
echo "run '$*'"
"$@"
}
几乎没有或根本没有理由导出该函数。任何交互式shell都已经提供了
.bashrc
本身的源代码,并且有充分的理由不在非交互式shell中提供此类函数。@chepner:谢谢您的提示。可能是我还不了解非交互式Shell的概念。这是否意味着这是不可能的?@chepner:我的理由是绕过一些机器上没有安装的程序(ibu控制台)。除了使用异常标记的调用外,它工作正常。非交互式shell通常只是执行脚本的shell。您不会希望脚本以与预期不同的方式工作,因为您无意中覆盖了脚本所依赖的函数。在.bashrc
中定义foo
很好;export-f foo
只是没有必要。@chepner:从.bashrc中删除export语句时,我得到错误“command not found”??
foo () {
# including $@ in a longer quoted string can cause some
# weird side effects; I just use $* instead.
echo "run '$*'"
"$@"
}