なぜ値は1ですか?

なぜ値は1ですか?

私はシェルスクリプトを学んでいて、ユーザーに「7」権限(「rwx」)を持つファイルを一覧表示するスクリプトを書いています。これまで私はこう書いています:

for F in *
do
        a= $(stat -c "%a" "$F")
        echo $a
        if ((b==7))
        then
                echo $F
        fi
done

ここで、aの値は「1」です。私がここで何を間違っているのか?

答え1

シェルではスペースが重要です。変える

a= $(stat -c "%a" "$F")

そして:

a=$(stat -c "%a" -- "$F")

(また、--コマンドがで始まるファイル名に対して引き続き機能するようにオプションの区切り文字を追加します-

または

a=$(stat -Lc "%a" -- "$F")

シンボリックリンクには、シンボリックリンクターゲットに対する権限が必要です(ほとんどのシステムでは、シンボリックリンク自体に対する権限は関係がないため)。

はい

簡単にするために、単一のファイルstatに対してコマンドを実行し、対話型コマンドラインでこれを行います。

$ stat -c "%a" file
660

それでは、スペースを使ってコマンドを試してみましょう。

$ a= $(stat -c "%a" file)
bash: 660: command not found
$ echo a=$a
a=

エラーメッセージが表示され、a新しい値に設定されていません。 (あなたのようにabeforeに割り当てられている場合は1変更されていません1。)今すぐ空白なしで試してみてください。

$ a=$(stat -c "%a" file)
$ echo a=$a
a=660

これはうまくいきます。 aコマンドから返された番号に正常に設定されましたstat

関連情報