将命令输出分配给变量时,新行将被空格替换

将命令输出分配给变量时,新行将被空格替换

我有一个文件,其想法是按照模式(“创建模式”)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
$

相关内容