
私は初めてバッシュに触れました。
テキスト照会からデータを読み取り、いくつかの変数を宣言するスクリプトを作成しようとしています。以下の例では、以下のようにタブ区切りのファイル「ab.txt」を読みます。
a->AA
b->BB
ここで -> はタブを意味します。
このデータを読み取るには、次のコードを使用しています。
#!/bin/bash
while read line
do
tmp=(${line///})
fieldName=${tmp[0]}
case $fieldName in
"a")
a=${tmp[1]}
;;
"b")
b=${tmp[1]}
;;
esac
done < "ab.txt"
echo "a:"
echo $a
echo "b:"
echo $b
echo "concat a,b"
echo $a$b
echo "concat b,a"
echo $b$a
これを行うと、「a」と「b」は大丈夫ですが、aとbをつなげません!出力は次のとおりです。
a:
AA
b:
BB
concat a,b
BB
concat b,a
AA
私は何が間違っていましたか?
答え1
@steedriverが問題を発見しました。 Windowsでは行末にエスケープ文字がありますが、Linuxではそうではありません。 Windowsで入力テキストファイルab.txtを作成したので、Linuxは追加の文字をa、b変数として読み込みます。私の解決策はdos2unixを使用してab.textを変換することで、これがうまくいきました。