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

时间:2016-05-12 14:42:44

标签: linux bash command-substitution

我有一个脚本,它使用find和chgrp/chmod递归设置某些权限并对$1

中指定的目录进行分组

要提取此目标目录的组,请使用

mygrp = ${stat -c %G $mydir}

但在bash下执行,会产生错误:

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

明白地运行命令

stat -c %G $mydir

正确地提取群组,我似乎无法将其纳入mygrp变量。

4 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

$()执行variable expansion

对于command substitution,您应该使用mygrp=$(stat -c %G $mydir)

saveWorkbook(templateWB, "some other path")

答案 2 :(得分:0)

用$()替换$ {}并删除等号周围的空格。

$()用于命令替换。

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

答案 3 :(得分:0)

你应该一直在做

$(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