以下Perl脚本(my.pl
)可以从命令行args上的文件或STDIN中读取:
while (<>) {
print($_);
}
perl my.pl
将从STDIN读取,而perl my.pl a.txt
从读取a.txt
。这非常方便。
想知道Bash中是否有一个等效项吗?
如果以文件名作为第一个参数调用脚本,则以下解决方案从文件中读取,$1
否则从标准输入中读取。
while read line
do
echo "$line"
done < "${1:-/dev/stdin}"
如果定义,则替换${1:-...}
将$1
使用自己进程的标准输入的文件名(如果没有定义)。
很好,可以用。另一个问题是为什么要为其添加报价?“ $ {1:-/ proc / $ {$} / fd / 0}”
您在命令行上提供的文件名可能为空格。
是否有使用什么区别
/proc/$$/fd/0
和/dev/stdin
?我注意到后者似乎更常见并且看起来更简单。最好将其添加
-r
到您的read
命令中,以免意外吃掉\
字符。用于while IFS= read -r line
保留前导和尾随空格。@NeDark:很好奇;我刚刚验证了它即使在使用时也可以在该平台上运行
/bin/sh
-您是否使用的不是bash
or的外壳sh
?