我正在使用shell脚本从数据库中检索课程名称。当课程名称中出现空间,例如计算机科学,环境科学等时,名称存储在列表的两个不同实例中,即在空间之前和之后的空间之类如“不同实例中的计算机”和不同实例列表中的“科学”,但是我想把它像“计算机科学”一样存储在同一个列表实例中,我该如何克服这个问题
这是我的检索课程名称的代码
db_value=`mysql -uroot -proot -Dproject_db -rN --execute
"SELECT CourseName FROM applicant_result"`
z=1
for value in $db_value
do
echo "V,eligibility_$z=$value"
let "z+=1"
done
echo "E,resume"
我得到的结果(注意V,eligibility_2和V,eligibility_3的值)
V,eligibility_1=chemistry
V,eligibility_2=computer
V,eligibility_3=science
V,eligibility_4=mathematics
V,eligibility_5=physics
答案 0 :(得分:3)
z=1
mysql -uroot -proot -Dproject_db -rN --execute "SELECT CourseName FROM applicant_result" | while read value
do
echo "V,eligibility_$z=$value"
let "z+=1"
done
echo "E,resume"
答案 1 :(得分:1)
如果这种方式不起作用,那就不要这样做了。 for ... in
分为单词而不是行。
一个可能更好的解决方案是使用更多线路识别的东西:
mysql blah blah blah | awk '{
n = n + 1;
print "V,eligability_"n"=$0
} END { print "E,resume" }'
请参阅以下tanscript以获取概念证明:
pax> echo 'chemistry
...> computer science
...> mathematcis
...> physics
...> basket weaving' | awk '{
...> n = n + 1;
...> print "V,eligibility_"n"="$0
...> } END {print "E,resume"}'
V,eligibility_1=chemistry
V,eligibility_2=computer science
V,eligibility_3=mathematcis
V,eligibility_4=physics
V,eligibility_5=basket weaving
E,resume
答案 2 :(得分:0)
键可以是IFS变量 - 输入字段分隔符 这决定了输入应该分成哪些字符。 所以在你的情况下,你想用新的行分开:
#!/bin/bash
db_value=`mysql -uroot -proot -Dproject_db -rN -e "SELECT CourseName, CourseEligibility FROM applicant_result"`
oldIFS="$IFS" # save old to be able to restore it later
IFS="
";
z=1
for value in $db_value; do
name=`echo $value | cut -f1`
elig=`echo $value | cut -f2`
#do whatever with $name and $elig
echo "V,eligibility_$z=$name"
: $[z++]
done
IFS="$oldIFS"
echo "E,resume"