我正在尝试创建一个帮助函数来开发我的脚本,该脚本打印传递给函数的每个参数的名称和值。
使用单个变量执行此操作可以通过shell参数扩展来实现,如:
foo=bar
var_name=${!foo@}
echo $var_name # foo
echo $foo # bar
在这样的函数中做同样的事情:
write_params() {
for var in "$@"; do
echo "${!var@} === $var"
done
}
使用以下呼叫进行呼叫
write_params $SOURCE $TARGET $pwd
我的世界会给我以下输出
SOURCE === <source value>
TARGET === <target value>
pwd === <pwd value>
但现在它给了我以下输出:
var === <source value>
var === <target value>
var === <pwd value>
当然我可以在这里使用一些魔法,但我现在经过一些搜索后仍未找到它,所以我会在这里问。
修改 如评论中所述,以下解决方案有效:
write_params() {
for var in "$@"; do
echo "$var === ${!var}"
done
}
如果你传递函数中的变量,如下所示:
write_params SOURCE TARGET pwd