是否可以通过命令 "dump" 所有 bash 特殊变量,例如 env?
Is it possible to "dump" all of the bash special variables via a command, like env?
#!/bin/bash
env
这吐出一堆环境变量。 $0、$@、$_等不输出。有没有办法将它们转储出来,类似于 env
或 set
转储其余环境的方式?我不是说 echo [=15=]
之类的东西,我想查看当前状态下所有可能的特殊变量,而不是直接调用它们。
不,没有自动执行此操作的现有功能。您必须自己枚举变量——但这很容易,因为只有几个:What are the special dollar sign shell variables?
内置变量包含在 set
命令的输出中。 ([=12=]
和 $@
根本不是变量,即使是特殊变量,所以它们不包括在内——但是 $_
、$BASH_ALIASES
、$BASH_SOURCE
, $BASH_VERSINFO
、$DIRSTACK
、$PPID
以及 是 内置变量的所有其他内容都存在)。
[=12=]
、$*
、$@
等不是内置变量;它们是特殊参数。语义完全不同(您可以使用 declare -p
来打印变量的值,但不能打印特殊参数的值;如果重新分配,许多内置变量将失去其特殊行为,而特殊参数永远不会成为分配的目标; 等)。
http://wiki.bash-hackers.org/syntax/shellvars涵盖内置变量和特殊参数。
如果您的目标是生成当前 shell 状态的日志,我建议如下:
(set; set -x; : "[=10=]" "$@") &>trace.log
set
转储实际上内置变量(包括$_
)的东西,以及[=的set -x
日志50=] : "[=27=]" "$@"
将包含足够的信息来重现所有基于您的位置参数("$*"
、"$@"
等)的特殊参数;而 set
的输出将包括所有其他状态。
#!/bin/bash
env
这吐出一堆环境变量。 $0、$@、$_等不输出。有没有办法将它们转储出来,类似于 env
或 set
转储其余环境的方式?我不是说 echo [=15=]
之类的东西,我想查看当前状态下所有可能的特殊变量,而不是直接调用它们。
不,没有自动执行此操作的现有功能。您必须自己枚举变量——但这很容易,因为只有几个:What are the special dollar sign shell variables?
内置变量包含在 set
命令的输出中。 ([=12=]
和 $@
根本不是变量,即使是特殊变量,所以它们不包括在内——但是 $_
、$BASH_ALIASES
、$BASH_SOURCE
, $BASH_VERSINFO
、$DIRSTACK
、$PPID
以及 是 内置变量的所有其他内容都存在)。
[=12=]
、$*
、$@
等不是内置变量;它们是特殊参数。语义完全不同(您可以使用 declare -p
来打印变量的值,但不能打印特殊参数的值;如果重新分配,许多内置变量将失去其特殊行为,而特殊参数永远不会成为分配的目标; 等)。
http://wiki.bash-hackers.org/syntax/shellvars涵盖内置变量和特殊参数。
如果您的目标是生成当前 shell 状态的日志,我建议如下:
(set; set -x; : "[=10=]" "$@") &>trace.log
set
转储实际上内置变量(包括$_
)的东西,以及[=的set -x
日志50=] : "[=27=]" "$@"
将包含足够的信息来重现所有基于您的位置参数("$*"
、"$@"
等)的特殊参数;而 set
的输出将包括所有其他状态。