【发布时间】:2016-05-24 07:40:36
【问题描述】:
有人可以建议如何解决这种情况:
我用 arg 调用函数:
funct $size
然后我需要在函数内部运行 bash 命令
function funct {
arg=$1
files=(`find /var/ -mindepth 3 -maxdepth 3 -type d -exec du -bs {} \; | awk '$1>$arg'`)
}
问题在于awk '$1>$arg'
我总是从find-du 结果中得到awk '$size>$size',而不是$1。
有人可以帮忙吗? 提前谢谢你。
【问题讨论】:
-
您是否对不那么损坏的答案感兴趣(即,与带有空格、glob 等的目录名称一起正常工作)?
-
...要清楚,
array=( $(...) )或其较不现代的等价物array=( `...` )几乎总是会有错误:未引用的扩展(这是将项目拆分为单个元素的方式)在 IFS 中对字符进行字符串拆分和 glob 扩展(这意味着如果您在输出中的任何位置都有一个空格包围的*,它将被当前目录的内容替换)。填充数组的正确方法是使用read -a、mapfile、readarray或while read循环。 -
...另外,考虑避免使用
function关键字。它与基线 POSIX shell 不兼容(声明函数的适当语法是funct() {- 前面没有function关键字,并且附加的()是强制性的),但是 - 与更有用的 bashisms 不同 - 给出您对兼容/标准化的语法没有任何好处。