bash在变量中展开变量,使用$作为前缀

时间:2013-06-18 11:25:00

标签: bash function variables loops expand

我正在使用bash函数,我怀疑它目前有语法错误,代码是这样的:

for (( i=1; i<$#; i++))
do
  GET_BLOCK "/$${!i}/" ...
done

我要做的是为第一个参数运行GET_BLOCK“/ $ 1 /”,对于第二个参数运行“/ $ 2 /”,依此类推,直到没有更多参数传递给脚本。我这样做了吗 对? (PS!我需要获得变量值$ 1,$ 2 exc ...)

1 个答案:

答案 0 :(得分:4)

迭代位置参数的更惯用的方法是使用$@

for p in "$@"; do
    GET_BLOCK "/$p/"
done

你想要的是

for ((i=1; i<$#; i++))
do
    GET_BLOCK "/${!i}"
done

但这不是非标准的,也不如直接迭代$@那么明确。