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'è $0
il 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
.
basename
edirname
? : D