使bash脚本接受来自文件或管道输出的输入

pdu*_*ois 1 unix linux bash pipe

我有以下bash脚本,它将表格数据作为输入,获取第一行并垂直吐出它们:

#!/bin/bash  
# my_script.sh
export LC_ALL=C
file=$1
head -n1  $file |
tr "\t" "\n" |
awk '{print $1 " " NR-1}'
Run Code Online (Sandbox Code Playgroud)

问题是我只能这样执行:

$ myscript.sh some_tab_file.txt 
Run Code Online (Sandbox Code Playgroud)

我想要做的是在上述功能之上还允许你这样做:

$ cat some_tab_file.txt myscript.sh | myscript.sh 
Run Code Online (Sandbox Code Playgroud)

即从管道输出中取出它.我怎样才能做到这一点?

Jon*_*ler 5

我通常写道:

export LC_ALL=C
head -n1 "$@" |
tr "\t" "\n" |
awk '{print $1 " " NR-1}'
Run Code Online (Sandbox Code Playgroud)

这适用于任意数量的参数,如果没有则参数为none."$@"在这个和许多其他环境中使用很重要.有关可用于控制shell参数处理方式的许多不同符号的详细信息,请参阅有关特殊参数shell参数扩展的Bash手册.通常,双引号是个好主意,特别是如果文件名可能包含空格.