2011-09-05 95 views
1

我試圖從管道捕獲輸出並將其存儲在變量中。使用subshel​​l即var = $(computeOutput)將不起作用,因爲computeOutput函數本身正在設置需要與輸出保存在同一範圍內的其他變量。如果我使用子shell,其他變量將設置在子shell的本地副本中,但不在父shell中。從管道捕獲輸出並將其存儲在變量中

一個解決方案我認爲是這樣的:

鑑於功能...

功能storeOutput(){VAR = $(貓) }

...當我請執行以下操作...

echo「hello」| storeOutput;回聲是$ var

...「你好」,VAR值,打印在控制檯上

然而,當我使用此功能在腳本中,而不是得到正確的結果我得到的一個上市當前目錄的內容。僅供參考我正在使用安裝了mac端口的mac OSX。

任何人都可以解釋爲什麼發生這種情況?或更好地提供更好的解決方案

+0

它不是很清楚什麼'var = $(貓)'應該todo。您應該按照提供非功能性示例的方式發佈簡化代碼。 – Lynch

+0

請記住,如果您不向cat提供參數,則需要std-in並將該數據傳遞給std-out。子shell從表達式$(cat)的父shell中繼承std-in,並且由於「$」,結果被父shell解釋爲文本。該文本然後在賦值var = $(cat)的右側使用。它是從管道捕獲輸出的一種方式。 – murungu

回答

1

問題解決了:在腳本中,我將多行輸出管道輸送到storeOutput函數。當我打印var的值時,我忘記用雙引號將其括起來,即「$ var」,因此假設它將部分輸出視爲命令,如ls

除此之外,函數storeOutput(){var = $(貓)}似乎工作

相關問題