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, $0bir 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 .
basenamevedirname? : D