将 stat 命令输出分配给变量时的错误替换

Bad Substitution when assigning stat command output to a variable

我有一个脚本,它使用 find 和 chgrp/chmod</code></p> 中指定的目录上递归设置某些权限和组 <p>要提取这个目标目录的组,我使用</p> <pre><code>mygrp = ${stat -c %G $mydir}

但是在bash下执行,这会产生一个错误:

${stat -c %G $mydir}: bad substitution

运行 命令明明是

stat -c %G $mydir

正确提取组,因为我似乎无法将其放入 mygrp 变量中。

您将 ${...}$(...) 混淆了。

mygrp=$(stat -c %G "$mydir")

请注意 = 周围不允许有空格。

${ }做一个variable expansion

对于 command substitution 你应该使用 $()

mygrp=$(stat -c %G $mydir) 

将 ${ } 替换为 $( ) 并删除等号两边的空格。

$() 用于命令替换。

mygrp=$(stat -c %G $mydir)

你应该一直在做

$(stat -c %G "$mydir") 

而不是

${stat -c %G $mydir}

您应该将 $mydir 放在双引号中,因为目录名称可能是非标准的,比如它们包含换行符。如果该行是

   $(stat -c %G $mydir) 

然后 :

$ ./your_script_name "dir
37190290"

会失败:

stat: cannot stat `dir': No such file or directory
stat: cannot stat `37190290': No such file or directory