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效果非常好。這取決於您的要求和可能的值是否確實是您所需要的。

相關內容