如何在脚本中生成串联键/值对的字符串?

如何在脚本中生成串联键/值对的字符串?

我需要--build-arg在 busybox shell 中使用一些键/值对(build.args 文件)构建参数字符串:

脚本文件

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

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

echo "$@"

构建参数

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作为脚本调用中的第二个参数传递。

答案1

您进入bar那里是因为这是循环之前的操作$1之后的内容。shift

要关闭两个位置参数,请使用shift 2。但是,在循环之前通过替换shift为 来清除位置参数列表可能更安全set --。这样,您就不需要依赖用户提供正确数量的参数。如果您尝试移走比列表中更多的值,某些 shell 会发出诊断消息,并且如果用户给您的值太少或太多,这些值仍将位于"$@".

此外,在设置位置参数时,无论是在这种情况下还是在一般情况下,您都需要使用set --in 代替 plain set,以避免意外设置 shell 选项,或者在这种情况下使用set无效选项进行调用。

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

相关内容