Eine meiner Bash-Shells gibt mir ein anderes Verhalten als die anderen. Ich weiß nicht, welche Einstellung geändert hat, aber check this out:Was kann das Befehlssubstitutionsverhalten in bash ändern?
[email protected]$ for f in $(echo a b c); do echo foo $f; done
foo a
foo b
foo c
[email protected]$ logout
Connection to huey closed.
[email protected]$ for f in $(echo a b c); do echo foo $f; done
foo a b c
Auf Host huey, die „für“ Schleife über tat, was ich erwartet hatte: es aufgeteilt auf Wortgrenzen. Auf Host-SPF wurde die "for" -Schleife nicht an Wortgrenzen aufgeteilt, sondern das Ganze als einzelnes Element behandelt. Ähnlich, wenn ich $ (ls) verwende, behandelt es das ganze große mehrzeilige Ding als ein einzelnes Element und druckt "foo" direkt vor der ersten Zeile.
Auf beiden Hosts bin ich bash laufen. In anderen Bash-Shells auf Host-SPF funktioniert es auch normal (Splits auf Wortgrenzen). Was könnte das ändern? Beide laufen die gleiche Version von bash (was "4.2.25 (1) -Release (x86_64-pc-linux-gnu)" ist). Die Zeichen sind die gleichen, da ich die for-loop Befehlszeile mit der Maus von der gleichen Quelle beide Male kopierte.
Danke!
Holy crap batman! Du bist unglaublich! Vielen Dank. :) Ich habe "echo $ IFS" in beiden Shells und beide zeigten nichts, aber wenn ich "IFS" in der defekten Shell löschte, begann es wieder zu arbeiten. " – Dave
@Dave Sie können dies ausführen, um die Ascii-Codes von zu bekommen die IFS-Variable: 'perl -e 'für $ c (split (" ", $ ENV {IFS})) {print ord ($ c)," \ n ";}' – Kelvin
Sieht so aus, als hätten wir ein Skript benutzt "speicherte" den alten Wert von $ IFS, indem er sagte old_ifs = $ IFS; IFS = ":"; ... tu stuff ...; IFS = $ old_ifs; Aber wenn IFS zu Beginn nicht gesetzt war, ändert sich dies die leere Zeichenfolge, die KEIN Aufteilen bedeutet, statt Unscharf, was bedeutet, dass sie auf Leerzeichen aufgeteilt wird. – Dave