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

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

ファイルがあるが、パターン別にコンテンツを把握し(「パターン生成」)、そのコンテンツを bash 変数に格納してカール文で使用できるようにするアイデアです。私のコマンドは機能しますが、問題は、出力が変数に割り当てられたときに新しい行が空白に置き換えられることです。

ファイルの例

...
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
...

グラブする必要がありますただ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
$

おすすめ記事