我练习bash,说实话,非常有趣。但是,我试图编写一个程序,将数组的值与变量进行比较,如果它们相同则应该打印数组值,并在其左侧打一个星号。 `
#!/bin/bash
color[0]=red
color[1]=blue
color[2]=black
color[3]=brown
color[4]=yellow
favorite="black"
for i in {0..4};do echo ${color[$i]};
if {"$favorite"=$color[i]}; then
echo"* $color[i]"
done
输出应为= *黑色
答案 0 :(得分:3)
您的代码中有一些不正确的语句会阻止它执行您的要求。 bash
中的比较是用方括号完成的,在它们周围留出空间。您正确使用=
进行字符串比较,但应将"
括在字符串变量中。此外,虽然您在echo
语句中正确地处理了元素数组,但在比较中不应该这样做,它也应该在${color[$i]}
中读取。{1}}。星号打印中的错误相同。所以,这里有一个带有修复程序的返工代码,但请在下面阅读更多内容。
#!/bin/bash
color[0]=red
color[1]=blue
color[2]=black
color[3]=brown
color[4]=yellow
favorite=black
for i in {0..4};do
echo ${color[$i]};
if [ "$favorite" = "${color[$i]}" ]; then
echo "* ${color[$i]}"
fi
done
虽然该代码现在可以使用,但很少有我喜欢和建议的东西(SO社区当然可以接受更专家的输入):始终将字符串括在"
中,因为它显示它是一个字符串变量;循环数组时,不需要使用索引变量;将变量始终包含在${}
内。
所以我的相同代码的版本将是:
#!/bin/bash
color=("red" "blue" "black" "brown" "yellow")
favorite="black"
for item in ${color[@]}; do
echo ${item}
if [ "${item}" = "${favorite}" ]; then
echo "* $item"
fi
done
这里有一个指向优秀的高级Bash-Scripting Guide的指针:http://tldp.org/LDP/abs/html/