У меня есть несколько строк типа "a b", "c d", "foo bar" и так далее. Я хочу перебрать этот набор строк и выполнить действие для каждого из них. В этом действии я вызываю несколько других скриптов, поэтому я не хочу менять IFS для этого цикла, так как он может нарушить мой вызов других скриптов. Вот почему я стараюсь избегать пространств, содержащихся в этих строках, но безуспешно.
Так, например, я ожидаю получить
a b
c d
И я попробовал следующее:
#!/bin/sh
x="a b"
y="c d"
echo "Attempt 1"
all="$x $y"
for i in $all ; do
echo $i
done
echo "Attempt 2"
all="a\ b c\ d"
for i in $all ; do
echo $i
done
echo "Attempt 3"
all=($x $y)
for i in ${all[@]} ; do
echo $i
done
echo "Attempt 4"
all='"'$x'" "'$y'"'
for i in $all ; do
echo $i
done
echo "Attempt 5"
for i in "$x" "$y" ; do
echo $i
done
echo "Attempt 6"
all2=("a b" "c d");
for i in ${all2[@]}; do
echo $i
done
echo "Attempt 7"
all3="a b c d"
echo $all3|
while read i; do
echo $i
done
Только попытка 5 выполнена успешно, но я хотел бы сделать это, не указывая одну переменную на строку (было бы больно поддерживать). Я просто представил x и y для тестирования, но идея состоит в том, чтобы объявить в одной переменной набор "a b" и "c d".