2015-07-21 80 views
0

我想创建一个简单的bash脚本,它会要求用户输入,然后根据他们选择的数字在声明中回显值。Bash脚本声明

declare -A bla 
bla[1]="bla1" 
bla[2]="bla2" 

echo "What bla would you like?" 
echo "" 
echo "1) bla1" 
echo "2) bla2" 

read answer 
echo "bla[$answer]" 

当我运行此脚本,我期待的输出可以是“BLA1”或“bla2”这取决于他们是否输入1或2。虽然我只得到了输出中:“BLA [1]”或“ BLA [2]

我在做什么错在这里

+1

'bla [$ answer]'是一个内部有可变扩展的字符串('$ answer')。你需要一个数组扩展。 (例如'$ {bla [$ answer]}')。 –

+0

我刚刚尝试过,输出结果是“./bla.sh:Bad substitution” – user2271571

+0

您使用的是什么外壳?这真的是bash吗?你输入了我写的内容吗?你可以在脚本的顶部添加'set -vx'并显示输出吗? –

回答

2

您要使用bash的select命令here:在

bla=(bla1 bla2) 
PS3="What bla would you like? " 
select b in "${bla[@]}"; do 
    [[ $b ]] && break 
done 
echo "you want: $b" 

注:

  • 一个常规数组就足够了,如果您只是使用整数索引,则不需要关联数组。
  • 数组扩展​​需要将数组扩展为其组成元素。
  • 当用户输入有效的响应时,$b变量将为非空,并且break语句退出select“循环”。
1

想通了,我用

#!/bin/sh而不是#!/bin/bash和编辑${bla[$answer]}

感谢所有帮助需要。

+1

我以为'/ bin/sh'会在新代替之前扼住'declare -A',但是可以。 –