для цикла с bash из переменной - PullRequest
2 голосов
/ 20 октября 2010

Допустим, у меня есть переменная, которая имеет значения:

#!/bin/sh
    MYVARIABLE="first,second,third"

    for vars in MYVARIABLE
    do 
    echo $vars
    done

это выше не работает, что я хочу, но выглядит хорошо, это должно вывести first second third без , Я не хочуэто будет напечатано без , никаких предложений?

Ответы [ 4 ]

9 голосов
/ 20 октября 2010

Используйте IFS (разделитель поля ввода), например.

#!/bin/sh
MYVARIABLE="first,second,third"
IFS=","

for vars in $MYVARIABLE
do 
  echo $vars
done
2 голосов
/ 21 октября 2010

Не уверен, что вы хотите сделать с содержимым MYVARIABLE, или как вы его заполняете, но очень хорошим вариантом для работы с данными CSV является использование awk.

Если у вас есть просто эта переменная для печати:

echo $MYVARIABLE | awk 'BEGIN { RS="," }{ print $0 }'

Если у вас есть файл CSV и вам необходимо выполнить расчет / преобразование данных, то вы должны разрешить awk:Извлеките файл, используя что-то вроде:

awk 'BEGIN { FS="," ; OFS="\n" } { print $1,$2,$3 }' filename.csv
(это просто идея, не связанная с вашим вопросом)

2 голосов
/ 20 октября 2010

1001 * попробовать *

MYVARIABLE="first,second,third"

for vars in $(echo $MYVARIABLE | tr "," "\n")
do 
  echo $vars
done

Или, если вы используете IFS, не забудьте вернуть IFS к исходному, когда закончите

MYVARIABLE="first,second,third"

OIFS=$IFS
IFS=","
for vars in $MYVARIABLE
do 
    echo $vars
done
IFS=$OIFS
2 голосов
/ 20 октября 2010
MYVARIABLE="first,second,third"
IFS=","
set -- $MYVARIABLE
for i in ${@}; do echo $i; done

# you can also use an array in cases where you want to use the values later on
array=($@)
for i in ${!array[@]}; do echo ${array[i]}; done
...