bash ${-:+-$-} -c


.

.

.

.

.

同事在 shell 腳本中看到一條奇怪的指令:

bash ${-:+-$-} -c 'command'

bash -c 'command' 這個容易理解,就是啟動一個 bash 子進程,並執行一條 'command' 指令,可是里面的 ${-:+-$-} 是什么意思呢?

同事問我,並說這句奇怪的語句竟然能正常執行,我表示從未見過這種寫法。

於是經過一番搜索和測試,發現了 shell 腳本中 ${} 指令的一種擴展用法。

通常我們使用 ${} 指令是取變量的值,或者做字符串截取,然而它還有其它高級用法。

 

接下來我們把這個表達式一一拆分來看。

一、我們都知道,在 shell 中以 $ 符號開頭的變量都是內置變量,我們來認識一個內置變量:

$- 表示當前 shell 使用的選項,也就是通過 set 命令為 shell 設置的選項。

二、${} 運算符可以根據變量不同的狀態(未設定、空值、非空值)返回不同的值

${} 指令很強大,有關於 ${} 指令的更多用法,請參見文末的參考文獻。

在本例中,使用的運算符是 ${:+}。
${a:+b} 這條語句的意思是,如果變量 a 為非空值,則返回字符串b。

明白了 $- 變量和 ${:+} 運算符的含義,相信大家應該立即明白了 ${-:+-$-} 的含義:當 $- 不為空時,返回字符串“-”和變量$-連接在一起的新字符串。

舉個栗子:假設當前 shell 的參數是 himBHs,也就是當 $- == himBHs 時,由於 $- 不為空,所以返回 -$-,因此 ${-:+-$-} 返回的結果就是 -himBHs 這個字符串。

# 所以這條命令解析之后就變成了:
bash -himBHs -c 'command'

 

結論:

${-:+-$-} 的含義是,將當前 shell 的選項作為子進程(bash)的選項。

 

 

參考文獻:

shell中${}和()的使用

shell中set命令

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM