Il mio collega, Ryan, è venuto da me con un bug nel suo script Bash, e ho identificato il problema con questo test:risultati Assegnare di globbing ad una variabile in Bash
$ mkdir ryan
$ mkdir ryan/smells-bad
$ FOO=ryan/smells-*
$ echo $FOO
ryan/smells-bad
$ touch $FOO/rotten_eggs
touch: cannot touch `ryan/smells-*/rotten_eggs': No such file or directory
Da questo deduco che il il globbing avviene durante il comando echo, non quando viene creata la variabile FOO.
abbiamo un paio di soluzioni alternative, in ordine decrescente di ungracefulness:
touch `echo $FOO`/rotten_eggs
Oppure:
pushd
cd $FOO
touch rotten_eggs
popd
Ma non è soddisfacente. Mi manca un trucco?
Grazie, questo lo spiega bene. –
Questo non è affatto il problema. Il problema è che bash assegna il glob alla variabile prima dell'espansione. Anche se il file esistesse, un glob sarebbe assegnato alla variabile, non un nome di file; e quel glob sarebbe stato espanso sull'uso –
@SamLiddicott L'esempio dell'OP avrebbe funzionato se esistessero "rotten_eggs", quindi era più o meno il problema. Il tempo in cui il glob è espanso non è rilevante nel breve esempio dell'OP. – jordanm