我试图编写一个shell脚本来显示作为位置参数传递的环境变量的值。
for i in $@
do
printf "$i" | xargs -I {} echo "${}"
done
但是,上述代码并不起作用。 有人可以指导我。
感谢。
答案 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