Jon*_*Jon 10
declare -x当您想要将变量传递给不同的程序,但不希望在父 shell 的全局范围内使用该变量时(即在函数内部声明时),请使用。
来自 bash 帮助:
当在函数中使用时,
declare使 NAME 成为本地名称,就像使用local命令一样。该-g选项会抑制此行为。
-x 使 NAME 导出
使用
+而不是-关闭给定的属性。
所以declare -gx NAME=X实际上的行为与 相同export NAME=X,但当declare -x声明语句位于函数内部时则不同。
declare -x FOO是一样的export FOO.它将FOO变量"导出" 为环境变量,以便从该shell会话运行的程序可以看到它.
可以使用声明-x而不是eval来允许将变量设置为shell的参数.例如,您可以替换极不安全的:
# THIS IS NOT SAFE while test $# -gt 0; do eval export $1 shift done
更安全:
while test $# -gt 0; do declare -x $1 shift done
顺便说一句,这个结构允许用户调用脚本:
$ ./test-script foo=bar
而不是更惯用(但有些混淆):
$ foo=bar ./test-script