在 SHELL BASH 脚本中获取外部 WHILE 变量

Get variable outside WHILE in SHELL BASH script

如何在 SHELL 脚本中回显 "while" 之外的变量 x 和 y:

#!/bin/bash
x=1
y=1

    mysql -e "show tables like 'do97_%';" --host=localhost --skip-column-names -u login999il --password=e9999999999df54y basenamel | while read tables; do
    mysql -e "SELECT id, tolbox, del_time FROM $tables WHERE deleted=0 ORDER BY create_time DESC LIMIT 0" --host=localhost --skip-column-names -u login999il --password=e9999999999df54y basenamel | while read id tolbox del_time; do
    y=$(($y+1))

    done

    x=$(($x+1))
    done

    # how get this variable outside "WHILE"
    echo $x
    echo $y

当我 运行 这个脚本 x 和 y 回显空 space 时,当我在 "while" 运算符中回显它时它工作但是如何在外部获取变量?

不要使用管道以避免在脚本中创建子外壳并使用 process substitution:

#!/bin/bash

x=1
y=1

while read -r tables; do

    while read -r id tolbox del_time; do
       ((y++))    
    done < <(mysql -e "SELECT id, tolbox, del_time FROM $tables WHERE deleted=0 ORDER BY create_time DESC LIMIT 0" --host=localhost --skip-column-names -u login999il --password=e9999999999df54y basenamel)

    ((x++))
done < <(mysql -e "show tables like 'do97_%';" --host=localhost --skip-column-names -u login999il --password=e9999999999df54y basenamel)

# now get this variable outside "WHILE"
echo $x
echo $y

使用管道时,会创建子 shell,并且在子 shell 退出后在子 shell 中创建的变量会丢失。