0

我有这样的:

 mysql  --user=$db_user --password=$db_pwd -e"$expQ" | while read name; do
   if [ $name != 'name' ];then
     COUNTER=$(($COUNTER + 1))
   fi
 done

我想更新全局计数器,但是当我执行下一个查询时,COUNTER不会选择“|”的前一个值 bcz (管道) 。

如何更改上述代码以使用命名管道或任何其他替代方法。这是参考,但我是 bash 新手,无法理解 mysql 是否可行 我的 bash 版本说:

GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0) Copyright (C) 2007 Free Software Foundation, Inc.

4

2 回答 2

2

请改用流程替换,如下所示:

COUNTER=0
while read -r name 
do
   if [[ $name != "name" ]]
   then
     ((COUNTER++))
   fi
done < <(mysql  --user="$db_user" --password="$db_pwd" -e"$expQ") 
于 2013-01-29T14:22:10.017 回答
0

如果您使用的是 4.2 或更高版本bash,您还可以设置该lastpipe选项,以便 while 循环不在子 shell 中运行,并COUNTER根据需要更新 的值。

shopt -s lastpipe
mysql  --user=$db_user --password=$db_pwd -e"$expQ" | while read name; do
  if [ $name != 'name' ];then
    COUNTER=$(($COUNTER + 1))
  fi
done

也就是说,流程替代可能仍然是一个更好的主意。

于 2013-01-29T14:42:18.620 回答