Bash 的基本變數

Bash 指令稿入門

Alex Scriven

Data Scientist

指派變數

和其他語言一樣,你可以用等號指派變數。

var1="Moon"

接著用 $ 來參照。

echo $var1
Moon
Bash 指令稿入門

指派字串變數

變數名稱可自訂(但要有意義):

firstname='Cynthia'
lastname='Liu'

echo "Hi there" $firstname $lastname
Hi there Cynthia Liu

兩個變數都被印出了,不錯!

Bash 指令稿入門

漏用 $ 符號

少了 $ 符號,就不會當成變數!

firstname='Cynthia'
lastname='Liu'
echo "Hi there " firstname lastname
Hi there firstname lastname
Bash 指令稿入門

(沒)指派到變數

在 Bash 建立變數時,空白很嚴格。請注意不要加空白!

var1 = "Moon"
echo $var1
script.sh: line 3: var1: command not found
Bash 指令稿入門

單引號、雙引號、反引號

在 Bash 中,不同引號代表不同含意,無論是在建立變數或輸出時皆然。

  • 單引號('sometext')= Shell 逐字看待其內容
  • 雙引號("sometext")= 也逐字,但允許使用 $ 與反引號

最後一種會建立「殼中殼」,如下所示。適合呼叫命令列程式。這是用反引號完成的。

  • 反引號(`sometext`)= Shell 執行指令並把 STDOUT 捕捉回變數
Bash 指令稿入門

不同的變數建立方式

來看看不同方式建立變數的效果吧。

now_var='NOW'

now_var_singlequote='$now_var' echo $now_var_singlequote
$now_var
now_var_doublequote="$now_var"
echo $now_var_doublequote
NOW
Bash 指令稿入門

date 程式

date 程式很適合用來示範反引號。

此程式的一般輸出:

date
Mon  2 Dec 2019 14:07:10 AEDT
Bash 指令稿入門

殼中殼(shell within a shell)

現在用用殼中殼:

rightnow_doublequote="The date is `date`."
echo $rightnow_doublequote
The date is Mon 2 Dec 2019 14:13:35 AEDT.

date 被呼叫,輸出被捕捉並和 echo 內容內嵌組合。

我們用了殼中殼!

Bash 指令稿入門

括號語法 vs 反引號

有一種與反引號等效的寫法:

rightnow_doublequote="The date is `date`."
rightnow_parentheses="The date is $(date)."
echo $rightnow_doublequote
echo $rightnow_parentheses
The date is Mon 2 Dec 2019 14:54:34 AEDT.
The date is Mon 2 Dec 2019 14:54:34 AEDT.

兩者效果相同,但反引號較舊。現代多用括號語法。(見 http://mywiki.wooledge.org/BashFAQ/082)

Bash 指令稿入門

一起來練習吧!

Bash 指令稿入門

Preparing Video For Download...