我尋覓了很多,而我看到一對夫婦使用的這些例子,具體from here:##或//在bash shell腳本中的含義是什麼?
scale=${scale##*[!0-9]*}
[ -z "${scale//[0-9]}" ]
沒有解釋什麼,這些符號做什麼,他們是如何工作的,或當使用這些腳本。在討論特殊符號時,我沒有在其他地方找到它們。看起來他們可能會有用。任何人都可以解釋##
和//
如何在上面鏈接的頁面上的腳本示例中工作?謝謝。
我尋覓了很多,而我看到一對夫婦使用的這些例子,具體from here:##或//在bash shell腳本中的含義是什麼?
scale=${scale##*[!0-9]*}
[ -z "${scale//[0-9]}" ]
沒有解釋什麼,這些符號做什麼,他們是如何工作的,或當使用這些腳本。在討論特殊符號時,我沒有在其他地方找到它們。看起來他們可能會有用。任何人都可以解釋##
和//
如何在上面鏈接的頁面上的腳本示例中工作?謝謝。
它們是shell的一部分parameter expansion語法,用於修改變量的值。 #
和%
用於刪除變量的前綴或後綴,而//
用於替換另一個字符串。
${parameter#word}
${parameter##word}
word被擴展,以產生一個模式,就像在文件名擴展(見文件名擴展)。如果模式匹配參數展開值的開始位置,那麼展開結果是最短匹配模式('#'情況)或最長匹配模式('##'情況)的參數展開值。刪除。
所以${scale##*[!0-9]*}
意味着刪除字符串的開頭,該字符串匹配任何後面跟非數字的字符後跟任何內容。所以foobar
成爲一個空字符串(因爲一切都被刪除),而123
被留下,因爲[!0-9]
永遠不會匹配任何東西。
${parameter/pattern/string}
圖案被膨脹,以產生一個模式,就像在文件名擴展。參數被擴展並且模式與其值的最長匹配被字符串替換。如果模式以'/'開始,模式的所有匹配都被替換爲字符串。通常只有第一場比賽被取代。如果模式以'#'開頭,則它必須在參數的擴展值的開頭匹配。如果模式以'%'開頭,則它必須在參數的擴展值的末尾匹配。如果string爲空,則刪除pattern的匹配,並且可以省略/ following模式。
所以${scale//[0-9]}
簡單地移除從所述變量的值的所有數字,然後test -z
用於測試,如果這是一個空字符串(這意味着原來的字符串只有數字)。
來源:http://tldp.org/LDP/abs/html/string-manipulation.html
${string##substring}
刪除從$字符串前$子的最長匹配。
${string//substring/replacement}
將$ substring的所有匹配替換爲$ replacement。
請不要鏈接到ABS;有更好的文檔可用。 – chepner
請發佈您有問題的實際代碼。 – Barmar
http://tldp.org/LDP/abs/html/parameter-substitution.html –