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.

Computerfreak
quelle

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.

Bryce Guinta
quelle
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.

Radu Rădeanu
quelle
1
$ echo -n "$IFS" | od -abc
0000000  sp  ht  nl
        040 011 012
             \t  \n
0000003

http://www.fvue.nl/wiki/Bash:_Show_IFS_value

Alex Ryan
quelle
Warum abstimmen? Diese Antwort vermittelt genau den Inhalt von IFS in 3 verschiedenen Notationen.
Alex Ryan
Es wäre schön, wenn Sie eine kurze Erklärung des odBefehls und der von Ihnen vorgeschlagenen Optionen hätten. Ich stelle mir vor, dass die Abstimmungen mit der Beantwortung zusammenhängen .
Jonas Dahlbæk
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:

Codeforester
quelle