我有一个Shell脚本,它可以获取一堆值。我基于Delimiter(,)对其进行隔离。现在我想在for循环中一个接一个地打印它。 对于例如
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
答案 0 :(得分:4)
您不需要循环。
sed 's/,/\n/g' <<< "$var"
sed 'y/,/\n/' <<< "$var"
tr ',' '\n' <<< "$var"
echo "${var//,/$'\n'}"
它们都能产生所需的输出。
答案 1 :(得分:0)
只需添加另一个选项-
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
...只是想显示循环结构,以防出现问题。
答案 2 :(得分:0)
您可以将其读入数组。这很容易理解:
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