Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建变量BASH命令_Bash_Variables_Command - Fatal编程技术网

创建变量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

我尝试为特殊的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 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替换它。谢谢