Използвайки баш черупката в терминала Mac OS X, искам да сложа в променлива всички имена на файлове в текущата директория, с едно име на ред (основно продукцията на ls -1). Ако обаче:
var=$(ls -1)
echo $var
Променливата "var" съдържа съдържа всичкиимена на файлове, но на един ред, разделени с интервали. Как мога да поправя това и да получа това, което искам. По-общо, каква е причината за това поведение? Какво се случва по време на разширяването на ls -1?
Разбирам, че мога да сложа това, което искам във файл, като направя следното, но предпочитам да постигна същия резултат с променлива.
ls -1 > var
Благодаря предварително.
Отговори:
3 за отговор № 1Вашата заповед var=$(ls -1)
работи добре. Опитвам echo "$var"
(с двойни кавички).
в echo $var
, bash чете $var
и предаване на всяка дума като аргумент echo
, Той третира пространствата и линиите по същия начин. Използването на двойни кавички причинява баш за лечение $var
като един аргумент, вместо да го преформатира.
Както споменахме, разширяването на $var
това, което се случва тук, се нарича разделяне на думите. Търсене за "Word Splitting" в man bash
за повече информация. Най- IFS
променлива (също в man bash
) контролира кои знаци bash използва за изпълнение на разделянето на думите.