我試圖從管道捕獲輸出並將其存儲在變量中。使用subshell即var = $(computeOutput)將不起作用,因爲computeOutput函數本身正在設置需要與輸出保存在同一範圍內的其他變量。如果我使用子shell,其他變量將設置在子shell的本地副本中,但不在父shell中。從管道捕獲輸出並將其存儲在變量中
一個解決方案我認爲是這樣的:
鑑於功能...
功能storeOutput(){VAR = $(貓) }
...當我請執行以下操作...
echo「hello」| storeOutput;回聲是$ var
...「你好」,VAR值,打印在控制檯上
然而,當我使用此功能在腳本中,而不是得到正確的結果我得到的一個上市當前目錄的內容。僅供參考我正在使用安裝了mac端口的mac OSX。
任何人都可以解釋爲什麼發生這種情況?或更好地提供更好的解決方案
它不是很清楚什麼'var = $(貓)'應該todo。您應該按照提供非功能性示例的方式發佈簡化代碼。 – Lynch
請記住,如果您不向cat提供參數,則需要std-in並將該數據傳遞給std-out。子shell從表達式$(cat)的父shell中繼承std-in,並且由於「$」,結果被父shell解釋爲文本。該文本然後在賦值var = $(cat)的右側使用。它是從管道捕獲輸出的一種方式。 – murungu