2013-05-01 42 views

回答

1

如果你想讓一個變量包含一個命令的結果,var=$(command)是解決方案。

在你的情況,

your_var=$(your_command | awk '{print $2}') 

您必須執行該命令,然後管它awk,將獲得第二個參數。

+1

完美!非常感謝 ! – Paula 2013-05-01 09:58:07

-1

Fedorqui的做法是好的,但提供一個替代的緣故:

your_command | read DONT_CARE YOUR_VAR IGNORE_ANYTHING_TRAILING 

這有沒有需要運行一個子shell和awk的利益。經過測試併爲zsh工作。您不必擔心IGNORE_ANYTHING_TRAILING,但是接下來說your_command吐出1 2 3 4,YOUR_VAR會以「2 3 4」結束。

+0

好主意。不得不說一個基本的'$ ls -l a |閱讀p'在bash中不適用於我。未設置'$ p'。 – fedorqui 2013-05-01 10:11:43

+0

是的......我在cygwin中的舊bash shell也很奇怪:'echo 1 |讀x'不設置x,'讀-u 0 x'(stdin的描述符)沒有幫助,'cat |讀取x'不起作用,但如果我只是'讀取x'並輸入值,那麼它工作正常。管子以某種方式擰緊它。一些討論在http://stackoverflow.com/questions/2746553/bash-script-read-values-from-stdin-pipe-什麼是一個愚蠢的殼! ; -P – 2013-05-01 10:15:31

+0

某些shell(特別是'bash')將在子shell中執行'read',因此在管道退出後該變量不可用。 POSIX標準只是說管道中的任何或所有命令都可以在子shell中執行;它不需要任何特定的行爲。 – chepner 2013-05-01 12:34:12

相關問題