Sono abbastanza confuso riguardo alle seguenti espressioni regolari che ho trovato in uno script di shell:
${0##*/}
${0%/*}
Come funzionano?
Sono abbastanza confuso riguardo alle seguenti espressioni regolari che ho trovato in uno script di shell:
${0##*/}
${0%/*}
Come funzionano?
Risposte:
Quelle non sono espressioni regolari, sono esempi di espansione dei parametri di Bash: la sostituzione di una variabile o di un parametro speciale con il suo valore. Wooledge Wiki ha una buona spiegazione .
Fondamentalmente, nell'esempio che hai, si ${0##*/}traduce in:
per la variabile $ 0 e il modello '/', i due hash significano da dall'inizio del parametro, eliminano la corrispondenza più lunga (o avida), fino al modello incluso.
Quindi, dov'è $0il nome di un file, ad es.,$HOME/documents/doc.txt , Quindi il parametro verrà espanso come:doc.txt
Allo stesso modo, per ${0%/*}, il modello /è abbinato alla fine del parametro (il %), con la corrispondenza più breve o non avida eliminata - che nell'esempio sopra ti darebbe$HOME/documents .
Vedi anche l'articolo sul Wiki di Bash Hacker .
*) indica che tutto fino al modello incluso verrà eliminato. Quindi, per l'inizio del parametro, #è a sinistra e alla fine %, lavorando dall'altra parte da destra.
sh.
basenameedirname? : D