如何在变量赋值期间保留来自命令输出的新行?

如何在变量赋值期间保留来自命令输出的新行?

考虑:

$ getfacl somefile.dat     # The output is formatted and contains several new lines..

# file: somefile.dat
# owner: user1
# group: group1
user::rw-
group::r--              #effective:r--
mask:r--
other:r--
$
$ ACL_PERMISSIONS=$(getfacl somefile.dat);
$ echo $ACL_PERMISSIONS;
# file: somefile.dat # owner: user1 # group: group1 user::rw- group::r-- #effective:r-- mask:r-- other:r--

那么如何在变量赋值期间保留这些新行,以便当我 echo 时$ACL_PERMISSIONS得到与 .. 相同的输出$ getfacl somefile.dat

答案1

您需要引用您的扩展,否则它将经历分词,这就是您所经历的。

acl=$(getfacl somefile.dat)
echo "$acl"

请记住,$(无论如何都会删除尾随换行符(它被视为一项功能)。如果这对您来说是个问题,您需要执行以下操作来保留它们(在 bash4+ 中):

mapfile acl < <(getfacl somefile.dat)
printf %s "${acl[@]}"

相关内容