shell中第一个字符串无法正常工作

时间:2014-08-13 01:22:48

标签: string shell

所以我有一些代码,如果字符串的第一个字符不是或是某个字符,我只想做while循环。

   while IFS=$'\t' read -r -a myArray
   do

    like=${myArray[0]}
    position=${myArray[1]}

    while [ ${like:0:1}=="E" ]
    file=$like."Rput"
    echo "$file"

所以当我回显文件时,文件名是## file.output,这是一个我根本不想要的文件。从某种意义上说,我希望它完全跳过它。

有人能告诉我发生了什么事吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果用while语句替换if-then,则有效:

while IFS=$'\t' read -r -a myArray
do 
    like=${myArray[0]}
    position=${myArray[1]}

    if [ "${like:0:1}" == "E" ]
    then
        file=$like."Rput"
        echo "$file"
    fi
done

另请注意,空格很重要。以下测试likeE平等的第一个字符:

[ "${like:0:1}" == "E" ]

但是,以下是不相关的事情:

[ "${like:0:1}"=="E" ]

由于此处的等号不以空格分隔,因此"${like:0:1}"=="E"仅被解释为单个字符串。如果字符串为非空,则单个字符串的测试返回true,如果字符串为空则返回false。由于${like:0:1}"=="E"始终为非空,因此始终返回true。