2016-08-23 8 views
0

Ich teste die folgende Bash-Datei test.sh. Aber wie erklärt man die Ausgabe? Manchmal würde ich mich erinnern, String-Variablen zu zitieren bedeutet, Whitespace in einer einzelnen Variable zu erhalten, aber wie man es versteht, anstatt es zu merken.So verstehen Sie, Variablen tief zu zitieren

list="one two three" 
for a in $list 
do 
    echo "$a" 
done 

for a in "$list" 
do 
    echo "$a" 
done 

Ausgang:
ein
zwei
drei
eins zwei drei

+2

doppelt zitiert verhindert ** Wort spalt **. Der Standardwert ** Internal Field Separator (IFS) ** ist '$ '\ t \ n'' (' Leerzeichen', 'Tab',' Newline') steuert, wie nicht angekreuzte Strings durch die Shell geteilt werden. (was ** Wortteilung ** genannt wird). Das bedeutet, dass ein nicht angekreuzter String bei jedem Auftreten eines Zeichens in 'IFS' durch die Shell geteilt wird. Double-Quoting verhindert *** Wortteilung ***. –

Antwort

1

Fortsetzung des Kommentar und Erklärung Wort spalt und der internes Feld Separator, Hier ist ein kurzes Beispiel, das helfen sollte:

(wenn Sie in einem Skript fortsetzen und beenden nicht nach IFS auf einen neuen Wert einstellen und müssen den aktuellen (oder Standard) IFS, wiederherstellen entweder den Strom sparen (z curifs="$IFS" und wiederherstellen, wenn Sie mit Ihrem Block, IFS="$curifs") oder nur auf den Standard (z. B. IFS=$' \t\n') zurückgesetzt. Sie können auch einfach Ihren Block mit dem neuen IFS in einer Subshell, z. (IFS=$',\n'; #do stuff) oder in einem while Block, z.B. while IFS=$'\n' read -r line; do ...)

Beispiel Verwendung/Output

$ bash ifs.sh 
Default IFS (space, tab, newline): 

one 
two 
three 
one two three 

IFS breaking only on newline: 

one two three 
one two three