Linux shell 脚本:意外的变量行为

3 shell shell-script string-manipulation echo

我有一个$myvar包含两行的变量,我想将其中的第一个放入一个新变量中。

当我尝试:

$ myvar1 = $(echo $myvar | head -n 1) 
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为 echo 不会像我期望的那样输出换行符。

显然我可以这样做:

$ myvar1 = $(echo $myvar | cut -d " " -f 1)
Run Code Online (Sandbox Code Playgroud)

它将工作,因为 echo 的输出在第一行包含一个单词,在第二行包含一个单词。

我有两个问题:

  1. 为什么 echo 打印空格而不是换行符?
  2. 是否有可能使它更容易或更正确(我不是 shell 脚本方面的专业人士,也许我在这里遗漏了一些东西)

Dan*_*eck 5

将参数echo用引号括起来以正确保留空格。

echo "$myvar"
Run Code Online (Sandbox Code Playgroud)

否则,值的空格分隔元素将被视为 的单独参数echo

$ ls -1
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites

$ myvar="$( ls -1 )"

$ echo $myvar
Desktop Documents Downloads Movies Music Pictures Sites

$ echo "$myvar"
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites
Run Code Online (Sandbox Code Playgroud)

要获得某些东西的第一行,head -n1效果很好。这取决于您的要求和可能的值是否确实是您需要的。