Bash
將讀取命令的輸入視為命令本身
假設我在腳本中定義了這個函式:
fct1() { local msg1=${@} if [[ "${verb}" = 'tru' ]]; then echo "I say $msg1" sleep 1 echo "i repeat" sleep 1 echo "I saaaaaaaaay $msg1" else echo "$msg1" fi }
我將如何讓使用者從中呼叫此函式
read
?我在想類似的東西
read fct1 "aha aha ahaaaaa"
輸出將是:
"I say aha aha ahaaaaa" "I repeat" "I saaaaaaaaay aha aha ahaaaaa"
基本上,我如何使用輸入
read
而不是將其儲存在變數中,而是將其用作命令?謝謝。
如果您希望將消息作為標準輸入中的一行讀取(在終端中使用腳本時由使用者輸入),然後作為參數傳遞給函式,您可以執行以下操作:
fct1 "$(line)"
line
不再是標準命令,但仍然相當普遍。您可以將其替換為head -n1
,但在某些實現中,當輸入不是來自終端設備時,它可以讀取多行(儘管它只輸出一行)。使用
bash
’sread
您必須將其儲存在變數中。這就是read
將輸入儲存在變數中的目的。IFS= read -r line && fct1 "$line"
使用
zsh
’sread
,您可以使用回顯讀取數據的選項-e
,而不是將其儲存在變數中,因此上面可以寫成:line``IFS= read -re
fct1 "$(IFS= read -re)"
(這比使用
read
變數效率低,因為我們需要分叉一個程序,以便 zsh 可以讀取read
的輸出)。當然,您也可以替換您的:
local msg1=${@}
和
local msg1; IFS= read -r msg1 || return