Shell 变量替换之二次嵌套 - shell嵌套参数
场景: 比如一个map (类比于 Java) , 传入一个 key 值 , 然后要取这个 key 的 value,此时 比如 key 的变量名为
key
,那 key 的值为${key}
,那要取 value 值应该就是${${key}}
(语法不一定正确) 或者是:"$key"
,但是希望二次解析.
使用 eval
# key变量解析 使用 eval 时,会进行多次解析
```
key2="keyname2"
keyname2="hello world 2"
eval finalValue="$""${key2}"
echo "$finalValue"
使用 ${!varname}
key="keyname1"
keyname1="hello world"
finalValue=${!key}
echo "$finalValue"
处理函数参数示例
遍历打印一个函数参数内容:
使用 eval
function display_param_a()
{
param_cnt=$#
i=1
while [ ${i} -le ${param_cnt} ]; do
eval param_value="$""${i}"
echo "$param_value"
i=$[i+1];
done
}
display_param_a 1 2 3 4 5 6
使用 {$!varname}
function display_param_b()
{
param_cnt=$#
i=1
while [ ${i} -le ${param_cnt} ]; do
param_value="${!i}"
echo "$param_value"
i=$[i+1];
done
}
display_param_b 1 2 3 4 5 6
参数解析的另外一种简洁方式.
直接遍历$@
for arg in "$@"
do
echo "arg:${arg}"
done
这种对于命令行参数以及函数调用参数都适用.
直接遍历,但是省略$@
另外这种写法还有一种简写方法. 如下, 就是直接省略掉了 后面的in list
.
for arg
do
echo "arg:${arg}"
done
后一种写法的正确性可以参考文章:https://docstore.mik.ua/orelly/unix3/upt/ch35_21.htm