代码
echo hi $ 1
现在在终端中,如果我运行sayHi John
,它将输出hi John
如果我想运行echo John | sayHi
,要获得相同的输出hi John
,我该怎么做?
答案 0 :(得分:2)
管道将数据提供给标准输入。您没有将标准输入作为参数。它只是标准输入。
要从该脚本中获得您想要的内容,您可以使用:
echo hi ${1:-$(cat)}
如果存在第一个参数,那将使用第一个参数,否则使用cat
来读取标准输入。
如果没有提供文件参数,cat
从标准输入读取,并将其作为输出产生(在标准输出上)。
${1:-...}
的{{1}}语法为Shell Parameter Expansion。
注意:如果没有提供参数且没有提供标准输入数据,这将“挂起”(在use $1 if it has a non-empty value otherwise use ...
中)。
答案 1 :(得分:1)
好问题。如果您希望bash脚本通过管道使用输入发送,则必须从stdin中读取它。
目前,您的脚本正在查找作为参数传递给程序的输入。 $ 1构造是跟随脚本的第一个参数。参数是以空格分隔的。
要从stdin获取输入,请调用read函数。
#!/bin/bash
read
echo hi $REPLY
$ REPLY是读取内容的默认位置。