bash中值的值

时间:2015-12-18 20:11:30

标签: bash shell

我试图编写一个shell脚本来显示作为位置参数传递的环境变量的值。

for i in $@
do
printf "$i" | xargs -I {} echo "${}"
done

但是,上述代码并不起作用。 有人可以指导我。

感谢。

2 个答案:

答案 0 :(得分:6)

您的脚本存在的问题是xargs没有使用shell来执行命令,因此参数中的$不会导致变量扩展。

而是使用间接变量引用,方法是将!放在变量名之前,如Parameter Expansion文档中所述。

for i in "$@"
do
    printf "%s = %s\n" "$i" "${!i}"
done

结果:

$ ./testvar.sh HOME USER
HOME = /Users/barmar
USER = barmar

答案 1 :(得分:2)

xargs没有通过shell运行命令,因此位置参数不会扩展。

您可以使用bash -c执行echo命令并展开位置参数:

for i in "$@"; do
   echo "$i" | xargs -I {} bash -c 'echo "${}"'
done