我是一名业余爱好者,阅读书籍和手册,以便进一步学习。我在一本计算总大小的书中遇到了以下脚本,并显示了命令替换的使用。我无法理解包含 {totalsize:=0}
, {size:-0}
, {totalsize-unset}
的部分。有人可以解释一下吗?
乍一看,它看起来像一个数组,但运算符:=
和:-
在这里做了什么,而totalsize
是包含值的变量,但当我echo ${totalsize-unset}
时,它确实返回PWD中文件大小的总和。 -unset
是某种内置的吗?
$ while read perms links owner group size month day time file
> do
> printf "%10d %s\n" "$size" "$file"
> totalsize=$(( ${totalsize:=0} + ${size:-0} ))
> done < <(ls -l *)
$ echo ${totalsize-unset}
答案 0 :(得分:3)
(好吧,让我们公平地说,这是一个人为的例子来证明过程替代而没有警告这里强调的安全风险。不幸的是。)
在Bash中,可以根据此处描述的语法操作或扩展变量:
http://www.tldp.org/LDP/abs/html/parameter-substitution.html#PARAMSUBREF
如果没有值,上面脚本中的意图就是将totalsize指定为零。在循环的第一次迭代期间,totalsize将没有值。零将用于计算。
有一种方法可以达到相同的效果。使用du -h
命令会更有意义。
首先运行man du
并了解此命令的作用(估计文件空间使用情况)