Shell

如何在腳本中生成一串串聯的鍵/值對?

  • October 4, 2021

--build-arg我需要在busybox shell 中使用一些鍵/值對(build.args 文件)來建構參數字元串:

script.sh

#!/bin/sh
one=$1
two=$2
shift

while IFS= read -r line; do
   set "$@" --build-arg "$line"
done < "build.args"

echo "$@"

建構.args

ONE=first
TWO=second

執行sh script.sh foo bar(是的,腳本需要兩個參數)應該讀取 build.args 的內容並添加鍵/值對作為--build-arg參數並輸出這個生成的字元串。這是我所期待的:

--build-arg ONE=first --build-arg TWO=second

但是用我的腳本我確實得到了

bar --build-arg ONE=first --build-arg TWO=second

asbar在腳本呼叫中作為第二個參數傳遞。

您正在進入bar那裡,因為那$1是您shift在循環之前的操作之後的內容。

要關閉兩個位置參數,請使用shift 2. shift但是,通過替換為 清除循環之前的位置參數列表可能更安全set --。這樣,您就不必依賴使用者提供正確數量的參數。如果您嘗試移出比列表中更多的值,某些 shell 會發出診斷消息,並且如果使用者給您的值太少或太多,這些仍然會在"$@".

此外,在設置位置參數時,無論是在這種情況下還是在一般情況下,您都需要使用set --代替 plain set,以避免意外設置 shell 選項,或者在這種情況下,set使用無效選項進行呼叫。

set -- "$@" --build-arg "$line"

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