我试图将数组元素分配给变量,以便稍后使用。例如:
constraints=("A" "B" "C" "E" "Q" "P" "S")
constraint=A
... a loop ...
rand=$[$RANDOM % ${#constraints[@]}]
let constraint="${constraints[${rand}]}"
echo $constraint
... end of loop ...
如果数组是全数字值,则可以正常工作。但如果它们是字符串,则回声总是输出0.为什么?
答案 0 :(得分:4)
let
仅用于算术运算。您的字符串没有数字值(除非它们命名的变量本身具有数值),因此它们在该上下文中都评估为0
。
成功:
constraint="${constraints[${rand}]}"
...没有let
。
在上下文中,这可能如下所示:
constraints=(A B C E Q P S)
rand=$(( RANDOM % ${#constraints[@]} ))
constraint=${constraints[${rand}]}
echo "$constraint"
注意:
$[ ]
和let
的讨论,请参阅the bash-hackers' wiki page on obsolete syntax。在现代脚本编写中也不是好形式。echo $var
需要引用 。见BashPitfalls #14。答案 1 :(得分:2)
摆脱“让”。
constraints=("A" "B" "C" "E" "Q" "P" "S")
constraint=A
rand=$[$RANDOM % ${#constraints[@]}]
constraint="${constraints[${rand}]}"
echo $constraint