将 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
我有一个脚本,它使用 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