在 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 中创建的变量会丢失。
如何在 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 中创建的变量会丢失。