#!/bin/bash
env
这会吐出一堆环境变量。 $ 0,$ @,$ _等不输出。有没有办法像env
或set
那样转储其余的环境?我不是说echo $0
之类的东西,而是要查看所有可能的特殊变量处于其当前状态,而无需直接调用它们。
答案 0 :(得分:3)
否,不存在自动执行此操作的功能。您必须自己枚举变量,但这很容易,因为只有几个:What are the special dollar sign shell variables?
答案 1 :(得分:2)
内置变量包含在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
转储实际上是 内置变量(包括$_
)的内容,运行set -x
的{{1}}日志将包含足够的信息以再现基于位置参数(: "$0" "$@"
,"$*"
等)的所有特殊参数;而"$@"
的输出将包括所有其他状态。