在Bash中设置A while循环中的变量

时间:2014-02-05 21:48:16

标签: string bash variables loops grep

我需要帮助将下面grep命令的输出设置为每行的变量。

    while read line; do 
        grep -oP '@\K[^ ]*' <<< $line
    done < tweets

上面显示了我想要的内容:

  

lunaluvbad

     

Mags_GB

     

等等......

但是,如果我会这样做:

    while read line; do
        usrs="grep -oP '@\K[^ ]*' <<< $line"
    done < tweets

    echo $usrs

它显示了奇怪的结果,当然不是我正在寻找的结果。我需要$ usrs来显示我上面提到的内容。例如:

  

lunaluvbad

     

Mags_GB

2 个答案:

答案 0 :(得分:2)

使用BASH数组和command substitution,如下所示:

users=()
while read -r line; do
    users+=( "$(grep -oP '@\K[^ ]*' <<< "$line")" )
done < tweets

或者使用process substitution

users=()
while read -r line; do
    users+=( "$line" )
done < <(grep -oP '@\K[^ ]*' tweets)

printf "%s\n" "${users[@]}"

答案 1 :(得分:2)

根本不需要循环。 grep无论如何都会遍历输入的行:

usrs=$(grep -oP '@\K[^ ]*' tweets)