2016-11-15 31 views
0

我正在练习bash,老实说很有趣。不过,我试图编写一个程序,将数组的值与变量进行比较,如果它们相同,那么它应该在数组左边打印带有星号的数组值。 `如何将数组的值与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

什么是现在的代码输出? – CephBirk

+0

您的脚本中充满了错误的语法。 – heemayl

回答

3

有没有在你的代码不正确几个陈述,防止它做你要求它什么。 bash中的比较用方括号完成,在它们周围留下空间。您正确使用=进行字符串比较,但应包含在"字符串变量中。此外,虽然您在echo语句中正确地指定了元素数组,但是在比较中不这样做,它也应该读${color[$i]}。星号打印中出现同样的错误。所以,这里有一个修复过的重做代码,但在下面阅读更多。

#!/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脚本编程指南这里:http://tldp.org/LDP/abs/html/

相关问题