当 stdout 不是终端时,如何在运行命令“ls -l”时启用换行符

当 stdout 不是终端时,如何在运行命令“ls -l”时启用换行符

我将命令存储在变量中cmd,并使用以下语句获取命令的输出:

echo `$cmd`

一切正常ls -l,除了换行符丢失。

答案1

如果您已将命令存储在字符串变量中,那么要运行它,您需要

eval "$cmd"

$cmd仅当命令不包含除空格之外的任何 shell 特殊字符时运行才有效。一般来说,将命令存储在字符串变量中是一个坏主意。最好定义一个函数:

cmd () {
  ls -l
}

然后你就可以运行它了cmd

最直接的问题是您进一步破坏了命令的输出,因为您正在使用不带引号的命令替换。您需要在变量和命令替换周围使用双引号。定义cmd为函数:

echo "`cmd`"

为了避免复杂命令出现意外,请使用美元括号而不是反引号:

echo "$(cmd)"

为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?以获得解释。

相关内容