从命令行读取参数非常容易,$1 $2 $3
但!如果我想做一个分配的循环$1 to $arg1
,$2 to $arg2
我不想通过输入来完成arg1=$1; arg2=$2
,我想学习如何处理单个$
..我该如何做循环?
要增加$arg
,我只需添加$arg$nr
并计数$nr
,但是我该如何处理$1
?$$nr
不工作..
答案1
对于具有数组的 shell,传统的答案是使用数组:
arg=( "$@" )
然后你有$1
in ${arg[0]}
,$2
in${arg[1]}
等等。
要循环这些,请使用
for a in "${arg[@]}"; do
# code that uses "$a" goes here
done
或者,如果位置参数列表中仍有数据并希望减少输入,
for a do
# code that uses "$a" goes here
done
请注意,引用对于保护原始参数中的数据不被分割和/或用作通配模式非常重要。
答案2
传统的答案是使用eval
.
for ((i=1; i<=$#; i++))
do
eval "arg$i=\${$i}"
done
(请注意,大括号是必需的,如 中那样bash
,$10
将被解释为${1}0
而不是${10}
)