我有以下代码:
#!/bin/bash
arrvar=( $(cat input.txt | grep -Poh '^[A-Z0-9_]+=.+') )
arrlen=${#arrvar[@]}
let arrlen--
i=0
while : ; do
echo "item $i..: ${arrvar[i]}"
let i++
if [ $i -gt $arrlen ]; then
break
fi
done
在input.txt中填写此内容:
HELLO=123 456
STACK=456 756
OVERFLOW=756 789
结果如下:
item 0..: HELLO=123
item 1..: 456
item 2..: STACK=456
item 3..: 756
item 4..: OVERFLOW=756
item 5..: 789
如果表达式.+
与所有字符匹配,为什么它不会在空格之前匹配任何内容?
我正在寻找这个输出:
item 0..: HELLO=123 456
item 1..: STACK=456 756
item 2..: OVERFLOW=756 789
你可以给我一个详尽的解释吗?我很感兴趣。
答案 0 :(得分:1)
通过执行IFS
将IFS=$'\n'
设置为换行符。这将分隔换行符上的字段,而不是space
,这是默认值IFS
。
重新使用现有脚本:
#!/bin/bash
IFS=$'\n'
arrvar=( $(cat input.txt | grep -Poh '^[A-Z0-9_]+=.+') )
arrlen=${#arrvar[@]}
let arrlen--
i=0
while : ; do
echo "item $i..: ${arrvar[i]}"
let i++
if [ $i -gt $arrlen ]; then
break
fi
done