Bash脚本 - 调用变量

时间:2014-05-10 01:14:03

标签: arrays bash if-statement

我正在尝试学习有关脚本和Linux系统的一些内容,因此我开始学习bash脚本。

对于练习,我正在尝试编写一个脚本来安装用户选择的所有程序。

我制作了一个安装部分的骨架,但我一直坚持确定用户的答案。

这是我的代码:

#!/bin/bash

declare -a instal_list=("Gimp" "VLC" "Gedit")

for ((i=0; i<3; i++))
do

echo "Do you want to install ${instal_list[i]} ?"
echo
read answer_${instal_list[i]}

if [[ $answer_${instal_list[i]} == "yes" ]] || [[ $answer_${instal_list[i]} == "Yes" ]] || [[ $answer_${instal_list[i]} == "YES" ]];
then

 instal+=" ${install_list[i]}"

fi

done

我的问题出在我的if声明中。在其中,我试图评估用户的回答是否是肯定的。问题出在answer_${instal_list[i]}变量中。

我不知道如何解释我的意思,所以我会尝试在例子中解释它。

示例:

  • 我们运行脚本,脚本会询问我们是否要安装Gimp。
  • 我们说是,并且脚本将该答案存储在变量“answer _ $ {instal_list [1]}”(“answer_Gimp”)中。
  • 我的问题是当我尝试回调该变量时(“answer_Gimp”)。 =要调用它我使用“$ answer _ $ {instal_list [1]}”行,但shell不能将该命令识别为answer_Gimp。

那么如何回调变量answer_${instal_list[1]}以便shell将其识别为“answer_Gimp”?

2 个答案:

答案 0 :(得分:1)

thing="Gimp"
answer_Gimp="Yes"

variableName="answer_$thing"
echo "The value of $variableName is ${!variableName}"

答案 1 :(得分:0)

如果你有bash版本4,你可以使用一个关联数组:

declare -a instal_list=("Gimp" "VLC" "Gedit")
declare -a to_install
declare -A answers

for prog in "${instal_list[@]}"; do
    read -p "Do you want to install $prog? [y/n] " answer["$prog"]
    if [[ "${answer["$prog"],,}" == y* ]]; then
        to_install+=( "$prog" )
    fi
done

echo you want to install:
printf "   %s\n" "${to_install[@]}"

看着这个,我不明白为什么你需要将答案保存在一个数组中。但如果你这样做,那你就是这样做的。