shell脚本 - 逐行循环 - 空间与线制动

ale*_*xus 0 bash shell sh

我的脚本非常简单:

$ cat $$.sh
#!/bin/sh -x

VAR="one two
three four"

for i in $VAR ; do
    echo $i
done
$ 
Run Code Online (Sandbox Code Playgroud)

运行输出:

$ sh -x $$.sh
+ VAR='one two
three four'
+ for i in '$VAR'
+ echo one
one
+ for i in '$VAR'
+ echo two
two
+ for i in '$VAR'
+ echo three
three
+ for i in '$VAR'
+ echo four
four
$
Run Code Online (Sandbox Code Playgroud)

看起来它正在寻找一个空间,我需要它来寻找换行符

Dig*_*uma 5

如果您逐行读取多行,则while read循环是执行此操作的常用方法:

VAR="one two
three four"

while IFS='' read -r i ; do
    echo "$i"
done <<< "$VAR"
Run Code Online (Sandbox Code Playgroud)

这会产生:

one two
three four

请注意,在此示例中,while循环$VAR使用bash here-string重定向从变量中获取输入.但这可以很容易地从文件或管道重定向.