Bash
在 bash 中,管道未設置值後讀取
使用 ksh 我使用 read 作為分隔值的便捷方式:
$ echo 1 2 3 4 5 | read a b dump $ echo $b $a 2 1 $
但它在 Bash 中失敗了:
$ echo 1 2 3 4 5 | read a b dump $ echo $b $a $
我沒有在手冊頁中找到失敗的原因,知道嗎?
bash
在子shell 上下文中執行管道的右側,因此不會保留對變數的更改(這是什麼read
) - 當子shell 執行時,它們會在命令結束時死亡。相反,您可以使用程序替換:
$ read a b dump < <(echo 1 2 3 4 5) $ echo $b $a 2 1
在這種情況下,
read
它在我們的主 shell 中執行,而我們的輸出生成命令在子 shell 中執行。該<(...)
語法創建一個子shell並將其輸出連接到管道,我們read
使用普通<
操作將其重定向到輸入。因為read
在我們的主 shell 中執行,所以變數設置正確。正如評論中所指出的,如果您的目標是以某種方式將字元串拆分為變數,則可以使用此處的字元串:
read a b dump <<<"1 2 3 4 5"
我認為還有更多內容,但如果沒有,這是一個更好的選擇。