secondLarge=`printf '%s\n' "${array[@]}" | sort -n | tail -2 | head -1`
我试图得到第二大的数字,我得到了它,但如果我尝试得到它,echo
我就得不到它。帮助我理解
secondLarge=`echo "${array[@]}" | sort -n | tail -2 | head -1`
答案1
当您向 GNU 版本printf
(通常安装在/usr/bin/printf
)和同名的 Bash 内置命令传递的参数多于%
格式字符串中的 -expandos 时,它们的作用都类似于循环。
鉴于:
declare -a array=( a b c )
然后:
printf '%s\n' "${array[@]}"
或多或少相当于:
for x in "${array[@]}"
do
echo $x
done
上述两者都会产生以下结果:
a
b
c
相比之下:
echo "${array[@]}"
产生这个:
a b c
您的管道对输出进行排序,然后获取倒数第二行。在该printf
示例中,数组中的每个元素都打印在自己的行上,因此您最终会获得数组中第二大的数值。如果您使用echo
,则只有一行要处理,因此您会得到包含所有数组值的一行。