0

私はこのようなsthを持っています:

 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

Use Process Substitution instead, as shown below:

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以降を使用している場合は、whileループがサブシェルで実行されず、の値が必要に応じて更新されるようにオプションbashを設定することもできます。lastpipeCOUNTER

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 に答える