iT邦幫忙

2023 iThome 鐵人賽

DAY 5
1

特殊符號

今天我將說明一些Bash中常用或重要的特殊符號

  • 批次處裡(;)
  • 路徑分隔符號(/)

在windows中以反斜線(\)作為分隔

  • 跳脫字元(\)
    像C語言那樣將反斜槓及緊跟的字元進行替換,也用於在命令行中執行多行命令
    轉換方式如下
跳脫字元 擴充後的結果
\a 響鈴
\b 退格
\e 跳脫
\f 換頁
\n 換行
\r 回車
\t 水平製表符
\v 垂直製表符
\ 反斜縣
' 單引號
" 雙引號
\nnn 八進位值為nnn的字元
\xHH 十六進位值為HH的字元
\uHHHH unicode為HHHH的字元
\uHHHHHHHH unicode為HHHHHHHH的字元
  • 併發模式(&): 使&前面的命令在背景執行,然後在前景執行&後面的命令

若有多個&則使除最後的命令外的命令在背景執行
若要使命令在背景,則單獨在結尾使用&

  • 引用背景程序到前景(% [<jobID>])
    • : 指定背景程序,若未指定則預設取最新的背景程序
    • 等價於fg %[jobID]
  • 單/雙引號('',""): 將文字作為字串處理而不是檔名、命令名稱等
    • 使用雙引號("")可以將變數或命令的結果作為字串的一部分

    倒引號(``)也能做到相同功能,不過已被棄用(deprecated)

  • 執行歷史紀錄中的第個命令(! <num>)
  • .
    作為路徑時表示目前目錄,而作為命令可當作是source這個命令的別名
  • 字串匹配([[...]])
  • 命令替換$(cmd): 執行括號中命令,並返回結果
    echo $(whoami) # 等價於 echo <username>
  • 條件重導向(&&,||)
    • &&: 當前面的命令執行成功時才執行後面的命令
    • ||: 當前面的命令執行成功時,後面的命令不會被執行
  • tilde expansion(~)
    • ~: 獲取$HOME的值
    • ~/foo: 等價於$HOME/foo
    • ~<user>/foo: 等價於的$HOME中的foo子目錄
    • ~+/foo: 等價於目前位置中的foo目錄
  • brace expansion({...}): 主要用於生成字串組合與範圍
    • 類似於flie expansion,但檔案可以不存在
    • 語法: premble+{COMMA_SEPARATED_TEXT}+postscript
      • premble: 前綴文字
      • postscript: 後綴文字
    • 範例
    // 字串組合(使用sed是為了將擴充的分隔符從空格改為換行)
    $ echo I_use_{Arch,Ubuntu,Fedora,Redhat}_BTW | sed 's/\ /\n/g'
    I_use_Arch_BTW
    I_use_Ubuntu_BTW
    I_use_Fedora_BTW
    I_use_Redhat_BTW
    //範圍生成: 語法為{x..y[..incr]},也可以用在for loop
    $ for i in {1..10..2}
    > do
    > echo $i
    > done
    1
    3
    5
    7
    9
    // 排列組合
    $ echo {a,b,c}{d,e,f}
    ad ae af bd be bf cd ce cf
    // 跟*(萬用字元)一起使用時,先解析花括號然後解析萬用字元
    ls *.{jp{e,}g,png} # 可以巢狀括展
    

其實還有Shell Parameter Expansion,不過礙於篇幅只好等講SHELL script時再介紹

REF

GNU manual
Wiki
Bash Script 語法解析. 各種單雙括弧、特殊符號語法 | by Vince | vswe | Medium


上一篇
Day4: bash介紹
下一篇
Day6: Linux的各個基本指令
系列文
I Use Linux BTW: 談Linux與其指令30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言