jon*_*han 4 bash scripting file line
我在网上搜索过这个问题,到目前为止我找到了两种方法:
while read line; do
commands
done < "$filename"
Run Code Online (Sandbox Code Playgroud)
和
for $line in $(cat $filename); do
commands
done
Run Code Online (Sandbox Code Playgroud)
如果线条有空格,这些都不起作用,例如,如果我们有这样的线条
textextext text
Run Code Online (Sandbox Code Playgroud)
它不会打印 textextext text
但
textextext
text
Run Code Online (Sandbox Code Playgroud)
它将这些事情视为一条不同的路线,我怎样才能避免这种情况发生?
像这样?
while IFS= read line ; do
something "$line"
done <"$file"
Run Code Online (Sandbox Code Playgroud)
这是一个简短的测试:
while IFS= read line ; do echo "$line"; done <<<"$(echo -e "a b\nc d")"
a b
c d
Run Code Online (Sandbox Code Playgroud)
你可以阅读(bash 4+)
readarray lines < "$file"
Run Code Online (Sandbox Code Playgroud)
然后
for line in "${lines[@]}";
do
echo "$line"
done
Run Code Online (Sandbox Code Playgroud)
请注意,默认情况下readarray甚至会包含每行的行尾字符