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

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

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

当我尝试时:

$ myvar1 = $(echo $myvar | head -n 1) 

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

显然我可以这样做:

$ myvar1 = $(echo $myvar | cut -d " " -f 1)

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

我有两个问题:

  1. 为什么 echo 打印空格而不是换行符?
  2. 是否可以轻松或更正确地完成它(我不是 Shell 脚本方面的专业人士,也许我在这里遗漏了一些东西)

答案1

将参数括echo在引号中以正确保留空格。

echo "$myvar"

否则,值中以空格分隔的元素将被视为 的单独参数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

获取某项内容的第一行,head -n1效果很好。这取决于您的要求和可能的值,这是否确实是您所需要的。

相关内容