Bash 将变量拆分为行并创建新变量

Bash 将变量拆分为行并创建新变量,bash,Bash,我有一个带结果的变量,我需要给每一行一个新变量。所以有好几次是一样的 我在变量$results行中有它们之间的代码。我希望每一行都有一个新的变量。我希望这样更好 Input from $results: Found1 Found2 Found3 Found4 Found5 etc... Output: w1 Found1 w2 Found1 w3 Found1 w4 Found1 w5 Found1 w1 Found2 w2 Found2 w3 Found2 w4 Found2 w5 Foun

我有一个带结果的变量,我需要给每一行一个新变量。所以有好几次是一样的

我在变量$results行中有它们之间的代码。我希望每一行都有一个新的变量。我希望这样更好

Input from $results:
Found1
Found2
Found3
Found4
Found5
etc...

Output:
w1 Found1
w2 Found1
w3 Found1
w4 Found1
w5 Found1
w1 Found2
w2 Found2
w3 Found2
w4 Found2
w5 Found2
w1 Found3
w2 Found3
w3 Found3
w4 Found3
w5 Found3
>


我在这里拉伸,但我想你想要的是这样的:

i=1
for z in $results; do
    eval "w$i=\"\$z\""
    ((i++))
done

echo "$w1"
echo "$w2"
echo "$w3"
echo "$w4"
echo "$w5"
这会将w1设置为Found1,将w2设置为Found2等


如果只有,比如说,3行输入,那么w4和w5将不会被设置。

很难说出你在问什么……我在变量$results行中有它们。我希望每一行都有一个新的变量。我希望它更好,请提供示例输入$results包含什么?和预期的输出,以便我们能够重现并帮助您。我在顶部进行了编辑。我不知道您为什么要使用多个变量,数组是否不适合您的情况?不要使用eval。@chepner,它与其他任何语言功能一样是语言功能。我同意,如果使用不当,它可能会伤害你,但说不要使用它是完全错误的。你知道$results的内容是什么吗?如果不是,那么,是的,在这里使用eval是错误的。@chepner,您能提供一个$results的内容示例,它将导致eval问题吗?好的,在这种情况下,eval可能是安全的,但它仍然是不必要的。改用declare:declare w$i=$z。使用eval`是一个坏习惯。
i=1
for z in $results; do
    eval "w$i=\"\$z\""
    ((i++))
done

echo "$w1"
echo "$w2"
echo "$w3"
echo "$w4"
echo "$w5"
zahl=$(echo "$results" | wc -l)

if [ "$zahl" -gt "5" ];then
  echo "over 5";
  exit 1
else
  for v in w1 w2 w3 w4 w5; do
    IFS= read -r "$v" || { unset "$v"; break; }
  done <<< "$results"
fi