nOption=' | awk '{total+=$1} END {print total/1024"kb"}' '
find . -type f -printf "%s %p/n"| sort -nr | head -n10 $nOption
我想创建一个脚本来查找当前目录中的最大文件。 这是我的脚本,如果我使用变量来代替那就有错误....
输出: ./big.sh:line 67:+ =:找不到命令
但如果我不使用变量,它会起作用:
find . -type f -printf "%s %p/n"| sort -nr | head -n10 | awk '{total+=$1} END {print total/1024"kb"}'
输出是我想要的: 680.021kb
我的剧本出了什么问题?
谢谢
答案 0 :(得分:4)
Single quoted strings不能包含其他单引号,因此awk
命令会被解释为shell命令。 Putting commands in variables很棘手,一般来说创建函数更容易,更安全,更易读:
nOption() {
awk '{total+=$1} END {print total/1024"kb"}'
}
find . -type f -printf "%s %p/n"| sort -nr | head -n10 | nOption
对于这种特定情况,正如@chepner所指出的那样,问题是你不能将|
之类的命令分隔符放在一个字符串中,然后将其作为一部分执行管道(没有eval
, which is evil)。
答案 1 :(得分:0)
问题在于引号内的引号,在变量扩展中......
为什么不选择单线?这是一个(微小)更快,更光滑......: - )
find . -type f -printf "%s %p/n"| sort -nr | head -n10 | awk '{total+=$1} END {print total/1024"kb"}'
<强>更新强>:
为了使脚本更灵活,您可以这样做:
dir="."
units="1024"
unitsstring="kb"
find "$dir" -type f -printf "%s %p/n"| sort -nr | head -n10 | awk '{total+=$1} END {print total/$units"$unitsstring"}'