memorizzando un nome di directory con spazi in una variabile bash

1

(Nota: dopo qualche ricerca in più ho una risposta parziale, ma non mi piace dover scrivere i comandi effettivi rispetto a quella variabile in modo diverso a seconda degli spazi incorporati o meno. Accetterò suggerimenti migliori) .

Mi piace memorizzare varie variabili di lavoro in bash mentre sto lavorando su qualcosa. Questo evita di doverlo scrivere ogni volta e ti aiuta anche quando torni a lavorare su di esso qualche tempo dopo (configura il compito in un file localprofile.sh e source più tardi ...) .

Vorrei memorizzare un nome di directory con spazi al suo interno. So come gestire gli spazi nei nomi di file / directory in modo interattivo, utilizzando la citazione o l'escaping \ -based:

$ ls -1 /Users/myuser/Library/Application\ Support/ | tail -5
iTerm2
icdd
org.videolan.vlc
pip
videosubscriptionsd

o

$ ls -1 "/Users/myuser/Library/Application Support/" | tail -5
iTerm2
icdd
org.videolan.vlc
pip
videosubscriptionsd

Ora vorrei assegnare quella directory a una variabile bash $ dn e non funziona così bene.

Ecco alcuni vari tentativi. Di proposito sono rimasto lontano dall'estensione della shell basata su ~.

dn='/Users/myuser/Library/Application Support/'
echo ''
echo ''
echo $dn
ls -1 $dn

dn='"/Users/myuser/Library/Application Support/"'
echo ''
echo ''
echo $dn
ls -1 $dn

dn=/Users/myuser/Library/Application\ Support/
echo ''
echo ''
echo $dn
ls -1 $dn

dn="/Users/myuser/Library/Application\ Support/"
echo ''
echo ''
echo $dn
ls -1 $dn

ognuno di questi mostra una variazione su ls: /Users/myuser/Library/Application\: No such file or directory

    
posta JL Peyret 09.10.2017 - 21:19
fonte

1 risposta

1

OK, trovato questo allargando per googling senza specificare mac o osx - questo è un problema di bash generico: Stackoverflow come aggiungere il percorso con lo spazio nella variabile bash

E, traducendo questo alla mia domanda, entrambi gli "approcci interattivi", cioè citando o \ -escaping funzionano, purché si avvolga la variabile bash nelle sue doppie virgolette quando si eseguono i comandi:

dn='/Users/myuser/Library/Application Support/'
ls -1 "$dn" | tail -5

dn=/Users/myuser/Library/Application\ Support/
ls -1 "$dn" | tail -5

Non utilizzare le virgolette singole sopra - non c'è alcuna sostituzione bash in quel caso e ottieni ls: $dn: No such file or directory .

Lo svantaggio qui è dover racchiudere le variabili tra virgolette o meno a seconda degli spazi incorporati.

dn="'/Users/myuser/Library/Application Support/'" e quindi non avere virgolette non funziona, btw.

    
risposta data 09.10.2017 - 21:43
fonte

Leggi altre domande sui tag