/ / Jak rozszerzyć ls -1 do zmiennej w terminalu Mac OSX - macos, bash, unix, ls, zmienna-ekspansja

Jak rozszerzyć ls -1 do zmiennej w terminalu Mac OSX - macos, bash, unix, ls, variable-expansion

Używając powłoki bash w terminalu Mac OS X, chcę umieścić w zmiennej wszystkie nazwy plików w bieżącym katalogu, z jedną nazwą w wierszu (w zasadzie wynik ls -1). Jeśli jednak to zrobię:

var=$(ls -1)
echo $var

Zmienna "var" zawiera wszystkienazwy plików, ale w jednym wierszu, oddzielone spacjami. Jak mogę to naprawić i uzyskać to, czego chcę. Bardziej ogólnie, jaka jest przyczyna tego zachowania? Co się dzieje podczas rozbudowy ls -1?

Zdaję sobie sprawę, że mogę umieścić to, co chcę w pliku, wykonując następujące czynności, ale wolałbym osiągnąć ten sam wynik ze zmienną.

ls -1 > var

Z góry dziękuję.

Odpowiedzi:

3 dla odpowiedzi № 1

Twoje polecenie var=$(ls -1) działa w porządku. Próbować echo "$var" (z podwójnymi cudzysłowami).

W echo $var, bash czyta $var i przekazywanie każdego słowa jako argumentu echo. Traktuje spacje i linie tak samo. Używanie podwójnych cudzysłowów powoduje bash w leczeniu $var jako pojedynczy argument, zamiast go ponownie formatować.

Jak wspomniano w mklement0, rozszerzenie $var to się dzieje nazywa się dzielenie słów. Wyszukaj "dzielenie słów" w man bash po więcej informacji. The IFS zmienna (również w man bash) kontroluje, jakie znaki bash używa do podziału na słowa.