2

以下のコードでわかるように、変数reloadを から0に変更しようとしています。1

for d in /home/*; do
  u="${d##*/}";
  reload=0;
  echo "Checking $u";
  if [ -e /home/$u/info/reload.php ]; then
    echo "FOUND!";
    reload=1;
  fi
done
echo $reload;
if [ $reload = 1 ]; then
  service apache2 reload
fi

問題は、変更されず、そのままであるということです$reload0出力は次のようになります (Apache はリロードされません)。

Checking user1
FOUND!
Checking user2
0 #< this should be 1 not 0 :(

bash 変数が変更されないのはなぜですか??

4

1 に答える 1

6

reloadユーザーごとにリセットしています。reload最後のユーザーのファイルが見つからない場合は0、ループを終了します。

推奨される修正 (読みやすくするためのインデント付き):

#!/usr/bin/env bash

reload=0
for d in /home/*; do
    u="${d##*/}"
    echo "Checking $u";
    if [ -e /home/$u/info/reload.php ]; then
        echo "FOUND!"
        reload=1
    fi
done
echo $reload
if [ $reload -eq 1 ]; then
    service apache2 reload
fi
于 2013-02-10T01:53:21.093 に答える