2014-11-07 808 views

回答

2

管道将数据输入到标准输入。您不会将标准输入作为参数。这只是标准输入。

为了让您可以使用您从脚本想要的东西:

echo hi ${1:-$(cat)} 

将使用第一个参数,如果有一个回落到使用cat以其他方式读取标准输入。

如果cat从标准输入读取,如果没有提供文件参数并生成输出(在标准输出上)。

${1:-...}语法为Shell Parameter Expansionuse $1 if it has a non-empty value otherwise use ...

注意:如果未提供参数且未在标准输入上提供数据,则会“挂起”(在cat中)。

+0

感谢您的回答。你能解释$ {1: - $(cat)}中的破折号吗? – sbs 2014-11-07 00:59:04

+0

@JohnnySun编辑。 – 2014-11-07 01:02:06

1

好问题。如果你想让你的bash脚本通过管道使用输入发送,你必须从标准输入读取它。

目前,您的脚本正在寻找作为参数传递给程序的输入。 $ 1构造是您的脚本之后的第一个参数。参数是用空格分隔的。

从stdin获取输入,调用读取函数。

#!/bin/bash 
read 
echo hi $REPLY 

$ REPLY是默认位置读取放东西。

+0

感谢您解释$ REPLY变量! – sbs 2014-11-07 00:59:54

+0

当然。如果你想要,你可以使用你自己的变量:阅读MyVar echo $ MyVar – ventsyv 2014-11-07 01:04:58