將命令輸出指派給變數時,新行會被空格取代

將命令輸出指派給變數時,新行會被空格取代

我有一個文件,其想法是按照模式(「創建模式」)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
$

相關內容