我一直试图让该head
实用程序显示除最后一行标准输入之外的所有内容。我需要的实际代码类似于cat myfile.txt | head -n $(($(wc -l)-1))
. 但这没有用。我在 Darwin/OS X 上这样做,它没有很好的语义head -n -1
,会让我得到类似的输出。
这些变化都不起作用。
cat myfile.txt | head -n $(wc -l | sed -E -e 's/\s//g')
echo "hello" | head -n $(wc -l | sed -E -e 's/\s//g')
我测试了更多的变化,特别是发现这个工作:
cat <<EOF | echo $(($(wc -l)-1))
>Hola
>Raul
>Como Esta
>Bueno?
>EOF
3
这里有一些更简单的东西也有效。
echo "hello world" | echo $(($(wc -w)+10))
可以理解的是,这给了我一个非法的行数错误。但它至少告诉我,head
程序在将内容传递给子外壳/命令替换之前没有使用标准输入,这是一种遥远的可能性,但无论如何我都想排除这种可能性。
echo "hello" | head -n $(cat && echo 1)
是什么解释了这里的子shell 的行为head
及其wc
相互作用?谢谢你的帮助。