我正在尝试学习有关脚本和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]}
变量中。
我不知道如何解释我的意思,所以我会尝试在例子中解释它。
示例:
那么如何回调变量answer_${instal_list[1]}
以便shell将其识别为“answer_Gimp”?
答案 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[@]}"
看着这个,我不明白为什么你需要将答案保存在一个数组中。但如果你这样做,那你就是这样做的。