скрипт оболочки bash - PullRequest
       2

скрипт оболочки bash

1 голос
/ 05 мая 2011

У меня есть переменная $ LIST, которая содержит несколько строк, а некоторые строки имеют пробелы, но мне нужно принять это как один против двух аргументов внутри моего цикла, как бы я это сделал?

\#!/bin/bash

LIST="test1
test 2"

for i in $LIST; do
 echo $i;
done

это даст мне 3 строки, но я хочу, чтобы 2 в качестве test1 на первой строке и test 2 на второй

Ответы [ 4 ]

5 голосов
/ 05 мая 2011
#!/bin/bash
LIST="test1
test 2"

while read i
do
    echo "[$i]"
done <<< "$LIST"

Благодаря символам [] мы видим, что цикл был оценен дважды.

4 голосов
/ 05 мая 2011

IFS контролирует то, что рассматривается как разрыв слова при раскрытии переменных (например, в команде for):

LIST="test1
test 2"

saveIFS="$IFS"; IFS=$'\n'
for i in $LIST; do
    IFS="$saveIFS" # This is only needed if something in the loop depends on IFS
    echo "$i"
done
IFS="$saveIFS"
0 голосов
/ 28 августа 2011

Просто для забавы и в образовательных целях: здесь нет необходимости в бахизмах, подобных <<<. Поймите, что echo хранит символы новой строки в строках в кавычках и просто читайте построчно следующим образом:

#!/bin/sh

LIST="test1
test 2"

echo "$LIST" |
while read -r line; do
  echo "[$line]"
done

$ ./x.sh
[test1]
[test 2]

Там, 100% POSIX совместимая оболочка!

0 голосов
/ 05 мая 2011

Нет необходимости менять IFS.Просто нужно указать свою переменную

LIST="test1
test 2"

for i in "$LIST"; do
 echo "$i";
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...