Bash
如何使 bash 別名與命令包含一起使用,即 $()(美元符號和括號)
我曾經有這樣的別名:
alias mount-open="sudo mount $(sudo blkid | gawk '/2tb-open/ { print substr($1, 0, 9) }') 2tb-open"
我不能 100% 確定它是一樣的,但 100% 它是 bash 別名,而不是 bash 函式,並且它包含其他命令而不使用變數等。
現在我無法完成這項工作。如果我加上雙引號(如範例中所示),它會嘗試在終端啟動時執行一些 sudo 命令。如果我使用單引號並轉義中間的引號:
alias mount-open='sudo mount $(sudo blkid | gawk \'/2tb-open/ { print substr($1, 0, 9) }\') 2tb-open'
它說:
bash: .bashrc: line 25: syntax error near unexpected token `('
我想這與預設 Ubuntu bashrc 中的“額外程式碼”有關,而 Fedora 則相當精簡。我的意思是,它適用於 Ubuntu。幾年前,我安裝了 Fedora 並將 bashrc 文件從我的 Ubuntu 系統複製到它,別名等工作。一周前它在 Fedora 32(使用 Ubuntu bashrc)中工作。但現在我有點數據失去了,我正試圖“重新發明”這個。目前我正在使用預設的 Fedora bashrc 文件,它最初只有 15 行
誰能建議如何解決這個問題?
謝謝你。
單引號不能在單引號字元串中轉義。您需要退出雙引號並稍後重新輸入:
alias mount-open='sudo mount $(sudo blkid | gawk '\''/2tb-open/ { print substr($1, 0, 9) }'\'') 2tb-open'
使用函式或腳本會容易得多:
mount-open() { sudo mount "$( sudo blkid | gawk '/2tb-open/ { print substr($1, 0, 9) }' )" 2tb-open }
雖然如果你想用 label 安裝設備
2tb-open
,mount-open() { sudo mount LABEL=2tb-open 2tb-open; }
應該足夠了。