コマンド出力を変数に割り当てると、新しい行は空白に置き換えられます

コマンド出力を変数に割り当てると、新しい行は空白に置き換えられます

ファイルがあり、パターン (「作成モード」) に従ってコンテンツを grep し、このコンテンツを bash 変数に保存して、curl ステートメントで使用するというアイデアがあります。コマンドは動作していますが、問題は、出力が変数に割り当てられると、新しい行が空白に置き換えられることです。

ファイルの例

...
example1
example2
 create mode 100644 repo/linux-image-5.4.0-89-generic_5.4.0-89.100_amd64.deb
 create mode 100644 repo/linux-modules-5.4.0-89-generic_5.4.0-89.100_amd64.deb
 create mode 100644 repo/python3.8-minimal_3.8.10-0ubuntu1~20.04.1_amd64.deb
 create mode 100644 repo/python3.8_3.8.10-0ubuntu1~20.04.1_amd64.deb
example3
example4
...

grepする必要があるのみUbuntuパッケージをbash変数に格納しますvar。アイデアは、フォーマットを維持することです(\n

grep、sed を使用して、printf で出力を変更し、出力を変数に割り当ててみました。

使用例grep and printf

test_variable=$( cat file.txt | grep "create mode" )
var=$( printf '%s\n' "${test_variable//' create mode 100644 repo/'/}" )
echo $var
repo/linux-image-5.4.0-89-generic_5.4.0-89.100_amd64.deb repo/linux-modules-5.4.0-89-generic_5.4.0-89.100_amd64.deb repo/python3.8-minimal_3.8.10-0ubuntu1~20.04.1_amd64.deb repo/python3.8_3.8.10-0ubuntu1~20.04.1_amd64.deb

同じ printf コマンドを使用しても、出力を変数に割り当てない場合、結果は次のようになります。

linux-image-5.4.0-89-generic_5.4.0-89.100_amd64.deb
linux-modules-5.4.0-89-generic_5.4.0-89.100_amd64.deb
python3.8-minimal_3.8.10-0ubuntu1~20.04.1_amd64.deb
python3.8_3.8.10-0ubuntu1~20.04.1_amd64.deb

trこの問題を解決するために、 などを使用しようとしました。

他の使用例sed

sed -e '/create mode/!d' file.txt
 create mode 100644 repo/linux-image-5.4.0-89-generic_5.4.0-89.100_amd64.deb
 create mode 100644 repo/linux-modules-5.4.0-89-generic_5.4.0-89.100_amd64.deb
 create mode 100644 repo/python3.8-minimal_3.8.10-0ubuntu1~20.04.1_amd64.deb
 create mode 100644 repo/python3.8_3.8.10-0ubuntu1~20.04.1_amd64.deb

それは問題ありません。しかし、この出力を変数に割り当てようとすると、改行が空白に置き換えられました。

var=$( sed -e '/create mode/!d' file.txt )
echo $var
create mode 100644 repo/linux-image-5.4.0-89-generic_5.4.0-89.100_amd64.deb create mode 100644 repo/linux-modules-5.4.0-89-generic_5.4.0-89.100_amd64.deb create mode 100644 repo/python3.8-minimal_3.8.10-0ubuntu1~20.04.1_amd64.deb create mode 100644 repo/python3.8_3.8.10-0ubuntu1~20.04.1_amd64.deb

これについて助けてもらえますか?ありがとう

答え1

使用すればecho "$var"問題なく動作します:

$ valor=$( cat <<EOF
> hola
> adios
> EOF
> )
$ echo $valor
hola adios
$ echo "$valor"
hola
adios
$

関連情報