【发布时间】:2022-01-17 01:46:05
【问题描述】:
我最近在学习 bash,我想在这个 for 循环中使用标志来读取文件的头部和尾部。
for filename in "$1"
do
echo $filename
head -n "$2" $filename | tail -n "$3"
done
我想使用-f(而不是$1)、-h(而不是$2)、-t(而不是$3)等标志。
【问题讨论】:
-
for filename in "$1"只会迭代一次。如果$1是一个以空格分隔的文件列表,您可以通过删除引号并使用for filename in $1...来遍历它们,但不要这样做。 -
使用 getopts、getopt 之类的东西,或使用类似的东西自己动手:
while $#; do if [ "$1" = "-f" ];then shift; f_arg="$1"; shift; elif ...pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html -
您应该澄清您的问题以显示您希望如何使用这些标志。我的理解是你想做的:
./myscript -f file1 file2 ... fileN -h N1 -t N2 -
不是您的问题的答案,但您可以通过以下方式执行此循环:
awk -v head=10 -v tail=2 'FNR==1{print FILENAME}FNR<=head && FNR>head-tail' file1 ... fileN或 (file*)。 -
使用像 -f 之类的标志(而不是 $1), .... 你到底是什么意思,为什么它特定于循环?请提供您想要实现的规范。
标签: bash shell command-line-arguments