Bir kabuk betiğinde bulduğum aşağıdaki normal ifadeler konusunda kafam oldukça karıştı:
${0##*/}
${0%/*}
Nasıl çalışıyorlar?
Bir kabuk betiğinde bulduğum aşağıdaki normal ifadeler konusunda kafam oldukça karıştı:
${0##*/}
${0%/*}
Nasıl çalışıyorlar?
Yanıtlar:
Bunlar normal ifadeler değil, Bash'in parametre genişlemesinin örnekleridir: bir değişkenin veya özel bir parametrenin değeri ile değiştirilmesi. Wooledge Wiki'nin iyi bir açıklaması var .
Temel olarak, sahip olduğunuz örnekte şöyle ${0##*/}
çevirir:
$ 0 değişkeni ve '/' kalıbı için, iki karma parametrenin başlangıcından itibaren , kalıba kadar ve kalıbı içeren en uzun (veya açgözlü) eşleşmeyi silin.
Öyleyse, $0
bir dosyanın adı nerede , örneğin. $HOME/documents/doc.txt
, Sonra parametre şöyle genişletilir:doc.txt
Buna benzer şekilde, ${0%/*}
desen /
ile eşleştirilir uç parametresinin ( %
), en kısa ya da olmayan hırslı eşlemeyle silinmiş - Örnek olarak vermek olacaktır ki yukarıda $HOME/documents
.
Bash Hacker'in Wiki'sindeki makaleye de bakın .
*
), desene kadar ve desenin dahil olduğu her şeyin silineceğini gösterir. Bu nedenle, parametrenin başlangıcı için , sağdan diğer tarafa çalışan #
solda ve %
sondadır.
sh
.
basename
vedirname
? : D