ファイルを1行ずつ読み込み、各繰り返しチェックで5番目の配列要素を+または - (プラスまたはマイナス)文字にします。私は行ごとにファイルを読むことができますが、+/-を認識するためにif/else文を取得することはできません。Bash if else文が+/-文字を認識しない
バッシュコードIは、それぞれの下
#!/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
を書かれている+/-それはプラスまたはマイナスのいずれかを言うのではなく、ノー述べなければなりません条件文が失敗したことを示します。これが正しく出力されたら、エコーコマンドを変更して、符号に応じて列2または3のいずれかで算術演算を行います。
あなたは '' {[5] MyArrayという}正しい値、 '$をecho'ingが、その後間違っを比較しています1つは、 '$ myArray [5]'です。 –
また、あなたの展開を引用してください。 '[" $ {myArray [5]} "= +]' - 左側が唯一の展開なので、実際にここで引用する必要があるのは唯一の部分です。右辺はそれ自体を表現する単純なリテラルであり、グロブとして解釈することはできませんので、そのまま安全です。 –
...でも、bashであれば、 '[[$ {myArray [5]} = +]]'で引用する必要はありません。 (まあ、*ほぼ* - それはグロブスタイルのパターンマッチとして右辺を扱うので、文字通りの比較を望んでいて、右手がグロブ中心の文字だったら、あなたは欲しい見積もり領土)。 –