如何获取shell脚本中最后一个递增的值?
我试图获取变量count的最后一个递增值,但每次打印时 0这是初始值,如何获取变量count的最后一个递增值如何获取shell脚本中最后一个递增的值?,shell,Shell,我试图获取变量count的最后一个递增值,但每次打印时 0这是初始值,如何获取变量count的最后一个递增值 count=0 mysql -uroot -proot -Dproject_ivr_db -rN --execute "SELECT Department FROM entrytests_datetime WHERE Discipline='msc'" | while read department do echo "V,department_$count=$depa
count=0
mysql -uroot -proot -Dproject_ivr_db -rN --execute "SELECT Department FROM
entrytests_datetime WHERE Discipline='msc'" | while read department
do
echo "V,department_$count=$department"
let "count++"
done
echo "V,count=$count"
echo "E,resume"
这是因为管道while循环创建了一个子shell,而子进程无法更改父进程的环境。请尝试以下方法:
#!/usr/bin/bash
count=0
while read department
do
echo "V,department_$count=$department"
let "count++"
done < <(mysql -uroot -proot -Dproject_ivr_db -rN --execute \
"SELECT Department FROM entrytests_datetime WHERE Discipline='msc'")
echo "V,count=$count"
echo "E,resume"
#/usr/bin/bash
计数=0
读系
做
echo“V,部门\计数=$department”
让“计数++”
done<问题在于循环是在子shell中执行的,并且值没有(也不能)传播到父shell。它在子shell中执行,因为管道中的命令必须是。您有两个选择:
打印子shell中的值
使循环在主shell中运行
第一个选项很容易,仅使用POSIX外壳结构。只需用大括号将最后一个回音缠绕在循环中:
count=0
mysql -uroot -proot -Dproject_ivr_db -rN --execute "SELECT Department FROM
entrytests_datetime WHERE Discipline='msc'" | {
while read department; do
echo "V,department_$count=$department"
let "count++"
done
echo "V,count=$count"
echo "E,resume"
}
由于脚本似乎到此结束,这应该是可行的。对于第二个选项,我只能在shell中看到一种支持进程替换扩展的方法,例如bash:
count=0
while read department; do
echo "V,department_$count=$department"
let "count++"
done < <(mysql -uroot -proot -Dproject_ivr_db -rN --execute "SELECT Department
FROM entrytests_datetime WHERE Discipline='msc'")
echo "V,count=$count"
echo "E,resume"
count=0
读系时;做
echo“V,部门\计数=$department”
让“计数++”
不,我没有。我的意思是你必须说它使用非POSIX扩展。并非所有shell都有此功能。在最新版本的bash
(4.2或更高版本)中,您可以在脚本开头添加shopt-s lastpipe
,以解决答案中描述的问题。