如何在bash中使用declare -x

Ank*_*wal 9 bash shell

有人可以给出一个例子,声明-x会有用吗?

Jon*_*Jon 10

declare -x当您想要将变量传递给不同的程序,但不希望在父 shell 的全局范围内使用该变量时(即在函数内部声明时),请使用。

来自 bash 帮助:

当在函数中使用时,declare使 NAME 成为本地名称,就像使用local 命令一样。该-g选项会抑制此行为。

-x 使 NAME 导出

使用+而不是-关闭给定的属性。

所以declare -gx NAME=X实际上的行为与 相同export NAME=X,但当declare -x声明语句位于函数内部时则不同。


Chr*_*ung 9

declare -x FOO是一样的export FOO.它将FOO变量"导出" 为环境变量,以便从该shell会话运行的程序可以看到它.

  • Downvoted,因为这个答案包含一个错误的陈述.`declare -x FOO`**不和`export FOO`相同.特别是,前者不会影响函数内的全局范围,后者则不会.`declare -gx FOO`可能与`export FOO`相同. (3认同)
  • 我不认为它们是确切的同义词。 (2认同)
  • 我不确定,但请看[这个问题](http://stackoverflow.com/q/7506644/834176).我试过了,他们采取了不同的行动. (2认同)

Wil*_*ell 6

可以使用声明-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

  • 在您评估字符串的任何时候,您都可以为能够构造字符串的用户提供使脚本执行任何操作的能力. (5认同)