データ型を失うことなくsedコマンドの出力を変数に渡す方法

データ型を失うことなくsedコマンドの出力を変数に渡す方法

パイプで区切られたデータを含む5行のファイルがあります。 sedコマンドを使用して、各行末のパイプのみを削除します。ただし、以下のコマンド出力を変数に渡すと、データ型が失われ、1行に表示されます。

5行をそのままにするために、次のデータを変数に渡す方法は?

sed 's/.$//' $input|sort

ベストアンサー1

あなたが現在行っていることを私たちに示していないので、私は100%確信できませんが、変数を引用していないようです。たとえば、次のファイルが提供されます。

$ cat file
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|

コマンドを実行して出力を変数に保存すると、改行が保存されます。ただし、印刷するかどうかは、変数の印刷方法によって異なります。

$ var=$(sed 's/.$//' file | sort)
$ echo $var       ## bad
foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz
$ echo "$var"     ## good
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz

引用符なしで変数を使用すると、$IFS変数の文字に基づいて変数を分割するSplit + Glob演算子が呼び出されます。デフォルトでは、スペース、改行、タブがあります。

$ printf '%s' "$IFS" | od -c
0000000      \t  \n
0000003

変数を引用すると、分割+グローブから変数を保護できます。これが変数を引用する理由の1つです。常に変数を引用してください。。理由の詳細については、次を参照してください。bash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスク

おすすめ記事