Wie überprüfe ich den aktuellen Wert von IFS?


7

Ich führe gerade ein Shell-Skript aus und vermute, dass das Problem darin besteht, dass ich versehentlich den Standardwert von IFS geändert habe, bei dem es sich um ein Leerzeichen handelt .

Ich möchte den aktuellen Wert von IFS überprüfen, weiß aber nicht, wie ich ihn finden soll.

Ich starte mein Ubuntu unter VMWare.

Antworten:


11
> printf %q "$IFS"
' \t\n'

Das %qFormatargument wird verwendet, um die in Anführungszeichen gesetzte Variable zu interpolieren $IFSund Steuerzeichen zu umgehen, die von der Shell interpretiert würden.

Hier können Sie sehen, dass IFS in Leerzeichen, Tabulatoren und Zeilenumbrüchen unterteilt ist.


9

Wie Sie wahrscheinlich bereits wissen, von dem Standardwert IFSist <space><tab><newline>. Verwenden von:

echo "$IFS"

Sie können wahrscheinlich schließen, dass es ein Zeilenumbruchzeichen und einige andere Leerzeichen gibt, aber nichts sicheres.

Um den genauen Wert der IFSVariablen zu ermitteln, können Sie die catBefehlshilfe wie folgt aufrufen:

echo "$IFS" | cat -ETv

das ist gleichbedeutend mit:

cat -ETv <<< "$IFS"

Beispielausgabe für den Standardwert von IFS:

cat -ETv <<< "$IFS"
 ^I$
$

Aus der vorherigen Ausgabe können Sie ableiten, dass am Anfang ein Leerzeichen und ein Zeilenumbruchzeichen vorhanden sind. Aber was ist mit den anderen seltsamen Charakteren. Schauen wir uns das an man cat:

   -E, --show-ends
          display $ at end of each line

   -T, --show-tabs
          display TAB characters as ^I

   -v, --show-nonprinting
          use ^ and M- notation, except for LFD (n.a. linefeed or newline character) and TAB

Die ^ISequenz aus der obigen Ausgabe bedeutet also ein TAB-Zeichen und die anderen beiden $Zeichen das Ende der Zeile.



0

Der Befehl echo $IFS(beachten Sie das Fehlen von doppelten Anführungszeichen) zeigt den Wert von IFS möglicherweise aufgrund der Wortteilung nicht korrekt an .

Zum Beispiel:

IFS=:
echo $IFS  # shows a blank line

Der richtige Weg, um IFS anzuzeigen, ist also:

echo "$IFS"

Andere Möglichkeiten sind:

set | grep -w IFS # shows IFS=$' \t\n'
printf '[%s]\n' "$IFS"

Verbunden:

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.