2014-11-07 804 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