为什么 Grave 操作员会更改命令的输出格式?

为什么 Grave 操作员会更改命令的输出格式?

你好,我想问为什么我写的时候

  ls -l

每行后面都有新行,但是当我将其分配给变量时

myVariable=`ls -l`

然后回显该变量

echo $myVariable

我把所有内容都连在一行中...谢谢

答案1

这个问题产生了两个独立的问题。

  1. ls命令在写入终端和写入文件或管道时的行为有所不同。通过比较这两个命令你可以看到这一点

    ls
    ls | cat
    

    在第一个示例中,ls可以看到它正在写入终端,因此它为人类读者格式化其输出。在第二个示例中,ls可以看到它正在写入文件或管道,因此它每行生成一个条目。您可以使用-1-C参数覆盖这两个设置。

  2. 当您分配ls -l给变量时,换行符将被保留。但是,在您的情况下,您在使用变量时不会引用该变量,因此每次运行的“空白”(不打印可见字符的所有内容)都会转换为单个空格。比较这些结果

    var=$(ls -l); echo $var
    var=$(ls -l); echo "$var"
    

$VAR 与 ${VAR} 以及引用或不引用了解更多详细信息。另请注意,我$(...)优先使用`...`.建议的重复答案,理解反引号解释了原因。

相关内容