代碼在/ 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