Source:
根據原文,{}
(Curly Braces) 主要有三種功能:
- Array Builder
- Parameter Expansion
- Output Grouping
A) Array Builder
製作 Sequences
|
|
或是倒過來:
|
|
間隔也可以改變:
|
|
此外也不一定只能使用數字:
|
|
當然,字母間隔也可以改變:
|
|
(字母間隔 zsh 看起來不支援)
更可以把兩組字母放在一起
|
|
Array 取值
-
Array 用小括號製作
-
跟 Python 一樣,取值從 0 開始,所以
[3]
其實是第4
個
|
|
結合前面的例子,快速製作 Array:
|
|
甚至可以這樣製作轉換二進位的 array:
|
|
當然平常轉換二進位應該用這種方式。
B) Parameter Expansion
除了上面提到的取值外,curly brace 還能做更多:
Parameter expansion involves what it says on the box: it takes the variable or expression within the braces and expands it to whatever it represents.
亦即,它可以把原有的變數用你想要的方式呈現出來。
事實上,前面 Array 看起來是取值,細節上也是將原有的 array 變數依照 index 轉成字串,也就是
|
|
回到正題:
%
:從字串的最後切割匹配的字串,例如
|
|
舉個相對實用的例子,假設想要轉換圖片檔:
|
|
用前面的技巧,可以改寫成:
|
|
加上 for loop 就更強大了
|
|
如果不想從字串的最後切,改從最前面開始呢?
#
:從字串的開始切割匹配的字串,例如
|
|
parameter expansion 還有更多細節,但必須要配合 script 才能發揮效果,之後會回頭談。
C) Output Grouping
如果有好幾組指令要執行,然後統一 output 到某個檔案,就需要用 curly brace 達成。
例如:
|
|
如果想將所有結果輸出到 PNGs.txt
,會發現這樣下只有會 ls
的結果。
那怎麼辦?
用 curly brace 包起來:
|
|
需要特別注意:curly brace 內需要各留一個空白,bash 才能正確解析。