Shell 变量替换之二次嵌套 - shell嵌套参数

  |   0 评论   |   5,363 浏览

场景: 比如一个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

image.png

评论

发表评论


取消