代码在/ usr/local/bin目录/ sayHi的使用上一个命令的输出作为管道输入的bash shell脚本
回声喜$ 1
现在在终端,如果我跑sayHi John
,它会输出hi John
如果我想运行echo John | sayHi
,要有相同的输出hi John
,我该怎么做?
代码在/ usr/local/bin目录/ sayHi的使用上一个命令的输出作为管道输入的bash shell脚本
回声喜$ 1
现在在终端,如果我跑sayHi John
,它会输出hi John
如果我想运行echo John | sayHi
,要有相同的输出hi John
,我该怎么做?
管道将数据输入到标准输入。您不会将标准输入作为参数。这只是标准输入。
为了让您可以使用您从脚本想要的东西:
echo hi ${1:-$(cat)}
将使用第一个参数,如果有一个回落到使用cat
以其他方式读取标准输入。
如果cat
从标准输入读取,如果没有提供文件参数并生成输出(在标准输出上)。
${1:-...}
语法为Shell Parameter Expansion为use $1 if it has a non-empty value otherwise use ...
。
注意:如果未提供参数且未在标准输入上提供数据,则会“挂起”(在cat
中)。
感谢您的回答。你能解释$ {1: - $(cat)}中的破折号吗? – sbs 2014-11-07 00:59:04
@JohnnySun编辑。 – 2014-11-07 01:02:06