Jedna z moich powłok basha daje mi inne zachowanie niż pozostałe. Nie wiem, co zmieniło się ustawienie, ale to sprawdzić:Co może zmienić zachowanie przy zamianie poleceń w bash?
[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
Na gospodarza Huey, „dla” pętli nad zrobił, czego się spodziewałem: ona podzielona na granicy słów. Na hoście hosta pętla "for" nie podzieliła granic słów, traktowała całość jako pojedynczy element. Podobnie, jeśli użyję $ (ls), potraktuje to całe wielopowierzchniowe coś jako pojedynczy element i wypisze "foo" tuż przed pierwszą linią.
Na obu hostach uruchamiam bash. W innych powłokach bash na hoście hosta działa również normalnie (dzieli się na granicach słów). Co może to zmienić? Oba działają z tą samą wersją basha (co jest "4.2.25 (1) -release (x86_64-pc-linux-gnu)"). Znaki są takie same, ponieważ kopiowałem-wklejałem linię poleceń for-loop za pomocą myszki z tego samego źródła za każdym razem.
Dzięki!
kurczę Batman! Jesteś niesamowity! Dzięki. :) Zrobiłem "echo $ IFS" w obu powłokach i obaj nic nie pokazali, ale kiedy zrobiłem "unset IFS" w uszkodzonej powłoce, zaczęło działać ponownie. " – Dave
@Do możesz to uruchomić, aby uzyskać kody ascii zmienna IFS: "perl -e" dla $ c (split ("", $ ENV {IFS})) {print ord ($ c), "\ n";} '' – Kelvin
Wygląda na to, że używaliśmy skryptu, który "zapisano" starą wartość $ IFS, wypisując old_ifs = $ IFS, IFS = ":"; ... rób rzeczy ...; IFS = $ old_ifs; Ale jeśli IFS był rozbrojony na początek, to zmienia to na pusty ciąg znaków, co oznacza brak podziału, zamiast rozbrojenia, co oznacza podział na biały obszar. – Dave