Сценарий оболочки для печати переменной с разделителем - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть сценарий оболочки, который получает кучу значений. Я разделяю его на основе разделителя (,). Теперь я хочу напечатать его по одному внутри цикла for. Для E.g

var=/a/b/c,d/e/f/,x/y/z
for i in $(echo $var | sed "s/,/ /g")
do
echo $i
done 

Вывод пуст, Ожидаемый вывод

/a/b/c
d/e/f/
x/y/z

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Просто чтобы добавить другую опцию -

var="/a/b/c,d/e/f/,x/y/z"
while IFS=, read a b c
do printf "a=$a b=$b c=$c\n"
done <<< "$var"
a=/a/b/c b=d/e/f/ c=x/y/z

Не нужен цикл - отлично работает, как

$: IFS=, read a b c <<< "$var"
$: printf "a=$a b=$b c=$c\n"
a=/a/b/c b=d/e/f/ c=x/y/z

... просто хотел показать структуру цикла в случае, если онпомог.

0 голосов
/ 12 ноября 2018

Вы можете прочитать это в массив. Это вполне читабельно:

var=/a/b/c,d/e/f/,x/y/z
IFS=, read -a paths <<<"$var"
for p in "${paths[@]}"; do echo "$p"; done
/a/b/c
d/e/f/
x/y/z
0 голосов
/ 12 ноября 2018

Вам не нужен цикл.

sed 's/,/\n/g' <<< "$var"
sed 'y/,/\n/' <<< "$var"
tr ',' '\n' <<< "$var"
echo "${var//,/$'\n'}"

все они дают желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...