我需要--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"