Linux shell 脚本 间接获取输入参数的方法

Linux shell 脚本下,获取输入参数使用$1,$2,可以直接使用$1,$2来获取输入参数,请问可以间接获取输入参数么,例如var=1 根据var的值来获取输入参数,这种语法应该怎么写?
我的问题的意思是在shell脚本中,var=2, 这个时候我如果想获取第二个输入参数也就是($2)怎么获取,${$var}好像不行

第1个回答  2012-01-31
如果是bash,可以用indirect expansion来搞,语法为 ${!var}。
比如
foo=bar
bar=123
echo ${!foo}
会打印 123

再比如下面的脚本,依次打印脚本的各个输入参数。

#!/bin/bash
var=1
while [ $var -le $# ]
do
echo "Param $var is ${!var}"
let var++
done

不用indirect expansion,也可以用 eval, 比如

#!/bin/bash
var=1
while [ $var -le $# ]
do
eval echo "Param $var is \$$var"
let var++
done追问

我想问一下,第一种的话,只有bash才会有的写法么?其他的shell支持么?这两种都很好,非常感谢

本回答被提问者采纳
第2个回答  2012-01-31
1. 用eval,可以把字符串当作命令来执行:
val=2
eval "x=\$$val"
echo $x

2. 用"$@"把参数列表转化成数组
val=1
x=( "$@" )
echo "${x[$val]}"
注意:数组是从0开始的,也就是 ${x[0]} 对应 $1、${x[1]} 对应 $2,依次类推……
第3个回答  2012-01-31
cat > a.sh << EOF
#!/bin/bash

FILES="$@"

for f in $FILES
do
echo $f
done

EOF
第4个回答  2012-01-31
第5个回答  2012-01-31
脚本再包一层? 写个脚本来调用当前的
相似回答