为什么a的值为1?

为什么a的值为1?

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

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

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

答案1

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

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未设置为新值。 (如果像您的情况一样,a之前已分配给1,则它将保持不变1。)现在尝试不使用空格:

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

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

相关内容