Bash if else语句不识别+/-字符

时间:2016-05-31 22:09:41

标签: bash unix

我试图逐行读取文件,并且每次迭代检查第五个数组元素,它将是+或 - (加号或减号)字符。我能够逐行读取文件,但不能让if / else语句识别+/-。

我写过的Bash代码

#!/bin/bash
# save the field separator
old_IFS=$IFS
while IFS=$'\t' read -r -a myArray
do 
    echo "${myArray[5]}"
    if [ $myArray[5] = "+" ]; then
       echo plus
    elif [ $myArray[5] = "-" ]; then
       echo minus
    else
        echo no
    fi
done < /Users/Alex/Desktop/test.bed

# restore default field separator 
IFS=$old_IFS 

示例输入

Scaffold1   34  39  name    .   -
Scaffold1   12  17  name    .   -
Scaffold1   17  12  name    .   +
Scaffold1   43  49  name    .   +
Scaffold1   45  48  name    .   -

示例输出

-
no
-
no
+
no
+
no
-
no

在每个+/-下,它应该是加号或减号,而是表示否,表示条件语句失败。一旦输出正确,我将改变echo命令,根据符号对第2列或第3列进行算术运算。

1 个答案:

答案 0 :(得分:5)

你需要:

${myArray[5]}

$myArray[5] # this is equivalent to "${myArray[0]}[5]"

顺便说一句,请考虑使用case语句:

case ${myArray[5]} in
  -) echo minus ;;
  +) echo plus ;;
  *) echo no ;;
esac

您还可以避免使用数组 - 从而使您的代码与POSIX sh兼容 - 为每列使用read的命名参数:

while IFS=$'\t' read -r scaffold num1 num2 name dot col _; do
  : "$col" refers to your fifth column here
done