Bash
如何將標準輸入拆分為多個多行字元串並將每個字元串放入不同的 bash 變數中
我正在尋找一種可能性,通過管道將多個多行字元串發送到 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