--build-arg
我需要在busybox shell 中使用一些键/值对(build.args 文件)来构建参数字符串:
脚本.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 --
代替 plainset
,以避免意外设置 shell 选项,或者在这种情况下,set
使用无效选项进行调用。