Bash 从流的头部和尾部删除指定数量的行

Bash 从流的头部和尾部删除指定数量的行,bash,Bash,我有bash代码。 当我执行它时,它只删除了少于它应该删除的内容。像/strip.sh 4 5 hi.txt>bye.txt一样应该删除前4行和最后5行,但它只删除前4行和最后4行。另外,当我执行/strip.sh 1 1 hi.txt>bye.txt时,它只删除最后一行,而不是第一行……#/垃圾箱/垃圾箱 k=$1 m=$2 fileName=$3 head -n -$k "$fileName" | tail -n +$m tail-n+“$($1+1))”head-n-n是“除了最后n行

我有bash代码。 当我执行它时,它只删除了少于它应该删除的内容。像
/strip.sh 4 5 hi.txt>bye.txt一样
应该删除前4行和最后5行,但它只删除前4行和最后4行。另外,当我执行
/strip.sh 1 1 hi.txt>bye.txt
时,它只删除最后一行,而不是第一行……

#/垃圾箱/垃圾箱
k=$1
m=$2
fileName=$3 
head -n -$k "$fileName" | tail -n +$m

tail-n+“$($1+1))”
head-n-n
是“除了最后n行以外的所有行”
tail-n+n
是“从第n行开始”。这到底与git有什么关系?@123,大概OP是在Windows上运行它,使用git包提供的msys构建的bash。这是非常偶尔相关的(那个特定的构建有一些bug;例如,进程替换——也就是说,
@CharlesDuffy足够公平了,但是对于标记git来说似乎仍然有点牵强。@123,我当然同意。
#!/bin/sh
tail -n +"$(( $1 + 1 ))" <"$3" | head -n -"$2"
set -- 4 5 /dev/stdin # assign $1, $2 and $3
printf '%s\n' {1..20} | tail -n +"$(( $1 + 1 ))" <"$3" | head -n -"$2"