创建变量BASH命令
我尝试为特殊的proprose定制一个小BASH脚本 当需要将命令分配给变量时,我会混淆BASH脚本 我的坏代码:创建变量BASH命令,bash,variables,command,Bash,Variables,Command,我尝试为特殊的proprose定制一个小BASH脚本 当需要将命令分配给变量时,我会混淆BASH脚本 我的坏代码: if [ -n "$2" ] then top=`| head -n $2` fi awk '{print $17, ">", $19;}' $logs_folder$i | sort -g | uniq -c | sort -r -g $top 因此,默认情况下,它返回所有行,但如果用户指定了一个数字,它将添加head命令,工作脚本如下所示: # set prop
if [ -n "$2" ]
then
top=`| head -n $2`
fi
awk '{print $17, ">", $19;}' $logs_folder$i | sort -g | uniq -c | sort -r -g $top
因此,默认情况下,它返回所有行,但如果用户指定了一个数字,它将添加head命令,工作脚本如下所示:
# set propper default value
top=""
if [ -n "$2" ]
then
# use double quotes instead of back-tics
# back-tics are for command substitution
# but you need the command itself as a string
top="| head -n $2"
fi
awk '{print $17, ">", $19;}' "$logs_folder$i" | sort -g | uniq -c | sort -r -g $top
改用数组形式:
if [ -n "$2" ]
then
top=(head -n "$2")
else
top=(cat)
fi
awk '{print $17, ">", $19;}' "$logs_folder$i" | sort -g | uniq -c | sort -r -g | "${top[@]}"
并尝试添加更多引号(“”)
实际上,您不能将管道保存到变量中,并让bash在它展开时以正常方式解析它,但您可以用另一个命令(cat)替换它
实际上,您可以使用eval,但它非常精致:
if [ -n "$2" ]
then
top="| head -n \"\$2\""
fi
eval "awk '{print $17, \">\", \$19;}' \"\$logs_folder\$i\" | sort -g | uniq -c | sort -r -g $top"
在这里,您可以阅读为什么不应该将命令放在变量中:很好,尝试用cat替换它。谢谢