2

まず最初に、私はBashスクリプトに非常に慣れていないことを述べさせてください。私は自分の問題の解決策を探そうとしましたが、自分に合った解決策を見つけることができませんでした。
次のようなファイルをbashを使用して解析するとします。

variable1 = value1
variable2 = value2

次のコードを使用して、ファイルを1行ずつ分割します。

cat /path/to/my.file | while read line; do
    echo $line      
done

変数から、区切り文字として$line使用して分割する配列を作成します=。これにより、次のように配列から変数の名前と値を取得できるようになります。

$array[0] #variable1
$array[1] #value1

これを行うための最良の方法は何でしょうか?

4

2 に答える 2

5

行の = 記号の文字列を分割するには、IFS を '=' に設定します。つまり、次のようになります。

cat file | while IFS='=' read key value; do
    ${array[0]}="$key"
    ${array[1]}="$value"
done

-a 引数を使用して、書き込む配列を指定することもできます。

cat file | while IFS='=' read -a array; do
    ...
done

bash のバージョンによって異なります。

後世のための古い完全に間違った答え:

ステートメントに引数を追加-d =します。read次に、次のことができます。

cat file | while read -d = key value; do
    $array[0]="$key"
    $array[1]="$value"
done
于 2013-01-18T15:11:52.267 に答える
3
while IFS='=' read -r k v; do
   : # do something with $k and $v
done < file

IFS は「内部フィールドセパレーター」であり、bash に「=」記号で行を分割するように指示します。

于 2013-01-18T15:24:14.337 に答える