为什么 a 的值为 1?

0 bash shell-script command-substitution variable

我正在学习 shell 脚本,我正在编写一个脚本,其中列出了用户具有“7”权限的文件,即“rwx”。到目前为止,我已经写了这个:

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

这里a的值为“1”。我在这里做错了什么?

Joh*_*024 5

在 shell 中,空格很重要。代替

a= $(stat -c "%a" "$F")
Run Code Online (Sandbox Code Playgroud)

和:

a=$(stat -c "%a" -- "$F")
Run Code Online (Sandbox Code Playgroud)

(还添加了--选项分隔符,因此该命令仍然适用于以 开头的文件名-

或者

a=$(stat -Lc "%a" -- "$F")
Run Code Online (Sandbox Code Playgroud)

如果对于符号链接,您需要符号链接目标的权限(因为在大多数系统上,符号链接本身的权限并不相关)。

例子

为简单起见,让我们stat在单个文件上运行该命令,然后在交互式命令行中执行此操作:

$ stat -c "%a" file
660
Run Code Online (Sandbox Code Playgroud)

现在,让我们尝试使用空格命令:

$ a= $(stat -c "%a" file)
bash: 660: command not found
$ echo a=$a
a=
Run Code Online (Sandbox Code Playgroud)

我们收到一条错误消息并且a未设置为新值。(如果在您的情况下,a之前已分配给1,则它将保持不变1。)现在尝试不使用空格:

$ a=$(stat -c "%a" file)
$ echo a=$a
a=660
Run Code Online (Sandbox Code Playgroud)

这有效。 a成功设置为stat命令返回的数字。