Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash函数中保留引号?_Linux_Bash - Fatal编程技术网

Linux 如何在bash函数中保留引号?

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在.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 () {
  # 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 '$*'" 
  "$@"
}