【发布时间】:2023-12-07 20:25:01
【问题描述】:
我想要一个可以从文件或标准输入中获取输入的 Bash 脚本,例如 grep
$ cat hw.txt
Hello world
$ grep wor hw.txt
Hello world
$ echo 'Hello world' | grep wor
Hello world
$ grep wor <<< 'Hello world'
Hello world
一切都很好。但是使用以下脚本
read b < "${1-/dev/stdin}"
echo $b
如果使用herestring会失败
$ hw.sh hw.txt
Hello world
$ echo 'Hello world' | hw.sh
Hello world
$ hw.sh <<< 'Hello world'
/opt/a/hw.sh: line 1: /dev/stdin: No such file or directory
【问题讨论】:
-
在你的情况下,顺便说一句,写
if [[ $# = 0 ]] ; then read b ; else read b < "$1" ; fi很容易解决这个问题。但我不知道为什么需要这样的解决方法。