Linux 使用函数根据用户输入分配以逗号分隔的变量
我想根据用户的输入,使用函数分配以逗号分隔的变量名。 我将使用下面的脚本获取用户输入,它将调用函数进行变量赋值Linux 使用函数根据用户输入分配以逗号分隔的变量,linux,bash,Linux,Bash,我想根据用户的输入,使用函数分配以逗号分隔的变量名。 我将使用下面的脚本获取用户输入,它将调用函数进行变量赋值 while [ "$ans" != "q" ] do clear echo "Choose your subject" echo "Press q once done" echo " 1.Science" echo " 2.Maths" echo " 3.E
while [ "$ans" != "q" ]
do
clear
echo "Choose your subject"
echo "Press q once done"
echo " 1.Science"
echo " 2.Maths"
echo " 3.English"
...
read ans
case $ans in
1) clear
Science;;
2) clear
Maths;;
3) clear
English;;
....
esac
done
clear
subjects=""
Science()
{
subjects+="$subjects Science"
}
Maths()
{
subjects+="$subjects Maths"
}
English()
{
subjects+="$subjects English"
}
最后,我想让用户选择不同的主题:
等等:
科学、数学
数学、英语
科学、英语
英式
subjects=”“
必须放在while
循环之前。否则,其值将在退出循环时丢失(将设置为空字符串)+=
运算符导致行subjects+=“$subjects Science”
中出现双重串联,因为右侧已经包含subjects
变量的展开。必须使用了subjects=“$subjects Science”
,或subjects+=“Science”
(对于使用+=
运算符的其他行也是如此)。此外,由于需要逗号分隔的列表,因此在连接字符串时必须使用,
字符,而不是空格字符。例如:subjects=“$subjects,Science”
#!/bin/bash
subjects=""
Science() {
subjects="$subjects,Science"
}
Maths() {
subjects="$subjects,Maths"
}
English() {
subjects="$subjects,English"
}
while [ "$ans" != "q" ]; do
clear
echo "Choose your subject"
echo "Press q once done"
echo " 1.Science"
echo " 2.Maths"
echo " 3.English"
read -r ans
case $ans in
1) Science;;
2) Maths;;
3) English;;
esac
done
subjects=${subjects:1} # to remove the leading ',' character
echo "Your selections are $subjects"
注意:我通常不会只使用函数将一个简单字符串附加到变量。是否有错误或困难,或者您是否陷入了困境?没有错误,但没有为主题变量分配值感谢Jetchisel,您给了我一些想法,我设法在不调用函数的情况下获取变量值,[链接]谢谢Nejat Aydin先生,这个解决方案很有效!仅供参考,我还设法在不使用函数的情况下完成它:
read-r ans case$ans in 1)clear subjects=“${subjects}${subjects:+,}Science”;;2) 清除科目=“${subjects}${subjects:+,}数学”;;3) 清除主题=“${subjects}${subjects:+,}英语”;;esac完成了
很高兴听到这个消息。