1

次のステートメントがあるとします。

ac_reg_ids="-1" #Starting value
(mysql) | while read ac_reg_id; do
    echo "$ac_reg_id" #variable is a result of a mysql query. Echoes a number.
    ac_reg_ids="$ac_reg_ids, $ac_reg_id" #concatenate a comma and $ac_reg_id, fails.
done
echo "ac_reg_ids: $ac_reg_ids" #echoes -1

この回答によると:https://stackoverflow.com/a/4181721/1313143

連結が機能するはずです。しかし、なぜそうではないのですか?ループ内の違いは何ですか?

それが問題になる場合に備えて:

> bash -version
> GNU bash、バージョン 4.2.8(1)-release (i686-pc-linux-gnu)

アップデート

set -eux を使用した出力:

+ echo 142
142
+ ac_reg_ids='-1, 142'
+ read ac_reg_id
4

1 に答える 1

5

shellcheckが役立つように指摘したように、サブシェルでac_reg_idsを変更しています。

サブシェルを避けるためにそれを書き直してください:

ac_reg_ids="-1" #Starting value
while read ac_reg_id; do
    echo "$ac_reg_id" 
    ac_reg_ids="$ac_reg_ids, $ac_reg_id"
done < <( mysql whatever )  # Redirect from process substution, avoiding pipeline
echo "ac_reg_ids: $ac_reg_ids" 
于 2013-02-27T18:56:52.157 に答える