パイプで区切られたデータを含む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シェルで変数を引用することを忘れてしまうセキュリティリスク。