trovo espansione della tilde non funziona per la seguente situazione:guscio espansione della tilde non funziona quando viene passato come opzione
$ set -x
$ ./print_arg.pl destdir=~/test
+ ./print_arg.pl 'destdir=/root/test'
destdir=/root/test
$ ./print_arg.pl dest-dir=~/test
+ ./print_arg.pl 'dest-dir=~/test'
dest-dir=~/test
$ ./print_arg.pl -destdir=~/test
+ ./print_arg.pl '-destdir=~/test'
dest-dir=~/test
Il contenuto di print_arg.pl è
#!/usr/bin/perl
print $ARGV[0],"\n";
Secondo Order of Shell processing Shell si dividerà prima di "espansione tilde". E ho notato che la divisione delle parole in realtà è diversa. Qual è la ragione per i diversi risultati?
Ho anche notato la frase "Le parole che il parser ha segnato come assegnazioni di variabili (** quelle che precedono il nome del comando **) e i reindirizzamenti vengono salvati per l'elaborazione successiva. " Quindi "destdir = ~/test" dopo che il comando potrebbe non essere contrassegnato come un'assegnazione affidabile. Allora come spiegarlo? – lisper
A causa dell'opzione 'set -k' shell, * potrebbe * essere un'assegnazione variabile. La mia ipotesi è che il parser non controlla se l'opzione è impostata e contrassegna qualsiasi cosa che potrebbe essere un compito valido in quanto tale. Dopo aver completato l'analisi (inclusa l'espansione della tilde), il codice responsabile della valutazione del comando analizzato può verificare se i compiti che seguono un comando devono essere valutati, in base a 'set -k'. Si potrebbe obiettare che è un errore in 'bash' ignorare' set -k' quando si identificano per prime le assegnazioni delle variabili. – chepner
Ho capito. Grazie per l'eccezionale spiegazione – lisper