是否可以通过命令(如 env)"dump"所有 bash 特殊变量?


#!/bin/bash
env

这吐出了一堆环境变量。 $0、$@、$_ 等不输出。 有没有办法将它们转储出来,类似于envset转储环境其余部分的方式? 我的意思不是echo $0之类的东西,我想在当前状态下查看所有可能的特殊变量,而无需直接调用所有变量。

不,没有现有的函数可以自动执行此操作。 你必须自己枚举变量——但这很容易,因为只有几个:什么是特殊的美元符号外壳变量?

内置变量包含在set命令的输出中。($0$@根本不是变量,即使是特殊的变量,所以它们不包括在内 - 但$_$BASH_ALIASES$BASH_SOURCE$BASH_VERSINFO$DIRSTACK$PPID,以及所有其他内置变量都存在(。

$0$*$@等都不是内置变量,而是特殊参数。语义是完全不同的(你可以使用declare -p来打印变量的值,但不能打印特殊参数的值;许多内置变量如果重新分配会失去它们的特殊行为,而特殊参数永远不能成为赋值的目标;等等(。

http://wiki.bash-hackers.org/syntax/shellvars 涵盖内置变量和特殊参数。


如果您的目标是生成当前 shell 状态的日志,我建议如下:

(set; set -x; : "$0" "$@") &>trace.log

set转储实际内置变量的东西(包括$_(,运行: "$0" "$@"set -x日志将包含足够的信息来重现所有基于位置参数的特殊参数("$*""$@"等(;而set的输出将包括所有其他状态。

相关内容

  • 没有找到相关文章

最新更新