Bash

如何將標準輸入拆分為多個多行字元串並將每個字元串放入不同的 bash 變數中

  • November 25, 2016

我正在尋找一種可能性,通過管道將多個多行字元串發送到 bash 腳本並在該腳本中獲取它們中的每一個。最後,我想將每個多行字元串儲存到它自己的變數中。

printf "$some_multiline_string" "$another_multiline_string" | some_script.sh some_params

bash 內部:

#!/bin/bash
file1=$(</dev/stdin)
file2=$(</dev/stdin)
...

如何將標準輸入拆分為多個多行變數?

為什麼不使用環境?

export some_multiline_string another_multiline_string

然後您可以從腳本中訪問這些變數。

如果它們可能非常大並且超過參數/envvar 的最大大小,或者如果它們組合超過 arg+env 列表的最大大小,那麼您可以使用管道傳遞它們:

myscript 3< <(printf %s "$some_multiline_string") \
        4< <(printf %s "$another_multiline_string") args

並且在myscript

IFS= read -rd '' -u3 var1
IFS= read -rd '' -u4 var2
exec 3<&- 4<&-

或者您可以從單個流中傳遞它們,例如在腳本的標準輸入上但用 NUL 分隔(bash不能出現在變數中):

printf '%s\0' "$some_multiline_string" "$another_multiline_string" |
 myscript args

並且在myscript

IFS= read -rd '' var1 && IFS= read -rd '' var2

引用自:https://unix.stackexchange.com/questions/325741