我剛剛在bash中看到了一些我不太明白的代碼。作爲新手bash scripter,我不確定發生了什麼事。
echo ${0##/*}
echo ${0}
我真的沒有看到這兩個命令(輸出腳本名稱)的輸出差異。那#
只是一個評論?和/*
有什麼關係。如果它是評論,它怎麼不會影響支撐的關閉}
?
任何人都可以給我一些這種語法的見解嗎?
我剛剛在bash中看到了一些我不太明白的代碼。作爲新手bash scripter,我不確定發生了什麼事。
echo ${0##/*}
echo ${0}
我真的沒有看到這兩個命令(輸出腳本名稱)的輸出差異。那#
只是一個評論?和/*
有什麼關係。如果它是評論,它怎麼不會影響支撐的關閉}
?
任何人都可以給我一些這種語法的見解嗎?
見高級Bash腳本編程指南在Substring removal部分:
${string##substring}
刪除從$字符串前的
substring
最長匹配。
*是通配符,匹配所有內容。命令${0##/*}
打印$0
的值,除非它以正斜槓開始,在這種情況下,它不打印任何內容。
查看bash(1)
手冊頁的Parameter Expansion
部分。
Linux tip: Bash parameters and parameter expansions
${PARAMETER##WORD} Results in removal of the longest matching pattern from the beginning rather than the shortest.
for example
[[email protected] ~]$ x="a1 b1 c2 d2"
[[email protected] ~]$ echo ${x#*1}
b1 c2 d2
[[email protected] ~]$ echo ${x##*1}
c2 d2
[[email protected] ~]$ echo ${x%1*}
a1 b
[[email protected] ~]$ echo ${x%%1*}
a
[[email protected] ~]$ echo ${x/1/3}
a3 b1 c2 d2
[[email protected] ~]$ echo ${x//1/3}
a3 b3 c2 d2
[[email protected] ~]$ echo ${x//?1/z3}
z3 z3 c2 d2
'$ {string ## substring}'移除一個文字子串,而不是$ substring – 2010-01-13 20:13:10