1
A
回答
4
這一切都在Shell Parameter Expansion section of the manual解釋:
${parameter:-word}
如果
parameter
是設置或者爲空,的word
膨脹被取代。否則,將替換parameter
的值。
在此之前就存在:
忽略在測試結腸結果只有一個參數沒有設置。
所以:
${X-stuff}
擴展爲:
- 的
$X
擴張如果X
設置 stuff
如果X
未設置。
試試:
$ unset X
$ echo "${X-stuff}"
stuff
$ X=
$ echo "${X-stuff}"
$ X=hello
$ echo "${X-stuff}"
hello
$
現在您的擴展是
${X-}
所以你猜它擴展爲$X
如果X
設置的擴張,併爲空字符串,如果X
未設置。
爲什麼要這麼做?對我來說,似乎這是一種變通方法的set -u
:
$ set -u
$ unset X
$ echo "$X"
bash: X: unbound variable
$ echo "${X-}"
$
最後,在測試X
if [ -z "${X-}" ]
(注意引號,是強制性的)測試是否是零(不管X
是否被設置,即使使用set -u
)。
+0
請解釋'-z'意思是什麼 –
+1
@ArielGabizon,請參閱'help test':_'-z STRING'如果字符串爲空,則爲真._ –
相關問題
- 1. 什麼是Eclipse Debugger中變量條目旁邊的id = xxx
- 2. 「c」是什麼意思旁邊的字符串在vba中?
- 3. 在TypeScript中屬性旁邊的&(&符號)是什麼意思
- 4. PyCharm中文件名旁邊的數字是什麼意思?
- 5. 匹配連字符/破折號旁邊某些字母
- 6. Ruby Rake中變量和符號之間的連接是什麼?
- 7. 在殼變量轉換JSON字符串字符串文字
- 8. 我想提出一個變量直接旁邊的一個字符串
- 9. 什麼正則表達式匹配字符串內的字符串,但不是'@'旁邊
- 10. @符號在終端中的權限旁邊意味着什麼?
- 11. 爲什麼數據框中的列名稱旁邊有符號?
- 12. dll旁邊的xml文件的目的是什麼?
- 13. 爲什麼format()將數字變量轉換爲字符變量?
- 14. 結構體旁邊的< >是做什麼的?
- 15. 連字符庫:「連字符」是什麼意思?
- 16. 什麼做的小圖標旁邊的每個變量分別表示,在SSIS變量窗口
- 17. 配售字母旁邊有一個BASH變量
- 18. 忽略整數是使用的sscanf()旁邊的字符
- 19. Eclipse中的CVS:我所有源文件的旁邊的數字是什麼
- 20. 什麼是變量?
- 21. 圖標旁邊的數字代表什麼?
- 22. git merge中「merge by mode by recursive」旁邊的這些符號是什麼?
- 23. IntelliJ中對象引用旁邊的井號是什麼意思?
- 24. Visual Studio中行號旁邊的這些圖標是什麼?
- 25. TFS:分支旁邊的綠色圖標是什麼意思?
- 26. 爲什麼我右邊框旁邊有一個右邊距?
- 27. `class_eval`字符串中的變量作用域是什麼?
- 28. jQuery:來自URL的變量,帶有字符和什麼不是
- 29. 什麼是空字符串或null變量的JSON標準?
- 30. 分支名稱旁邊的這個數字[master +2〜0 -0!]是什麼?
這一切都在手冊的[_Shell參數擴展_部分](http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion)中進行了解釋。 –