我在build.include中读过一段代码
set -u
prepare_build_args() {
IFS=',' read -r -a BUILD_ARGS_ARRAY <<< "$@"
for i in ${BUILD_ARGS_ARRAY[@]}; do
BUILD_ARGS+="--build-arg $i "
done
}
由于我是Shell的新手,所以我很难理解这段代码。
IFS
是分配了值','的变量吗?为什么后面要跟read
命令?
-r -a
是什么意思? <<<
会做什么?
set -u
,这意味着未分配的变量将被识别为错误。这是范围的问题吗? [@]
是什么意思?prepare_build_args
函数中返回吗?答案 0 :(得分:1)
浏览Bash manual可能会有所帮助。
IFS是Internal Field Separator,在read命令仅将其应用于该命令之前进行设置。
read builtin command选项$this->client = new GuzzleClient(['defaults' => [
'verify' => false
]]);
停止反斜杠处理数据,并且-r
读入数组(在这种情况下为-a
)。
BUILD_ARGS_ARRAY
是here string,它将arguments of the function <<<
引向prepare_build_args
命令。
read
由BUILD_ARGS_ARRAY
命令设置。 read
Bash语法扩展了array。
Variable scope是全局的。
答案 1 :(得分:0)
简而言之,这段代码:
import time
def redraw(delay, color, canvas):
time.sleep(delay)
#some parentheses are for the arguments
(canvas).create_(shape)(blah, outline=(color), fill=(color))
的作用,但是"$*"
在将结果作为单个字符串求值的上下文中使用也是如此) 。"$@"
的数组中BUILD_ARGS_ARRAY
附加到--build-arg <result>
。这是非常多的错误,绝对不能被任何人使用。要详细了解原因,请执行以下操作:
BUILD_ARGS
适用于将其结果视为列表的情况。在字符串上下文中扩展它会抛弃参数之间的原始分隔,将其替换为"$@"
中的第一个字符(在扩展完成的情况下, not 扩展{ {1}},其中消耗了结果。IFS
扩展使此代码的行为对您的参数是否包含globbing字符(如果包含)以及运行它的目录中存在哪些文件以及read
,{{ 1}}或类似的选项。请参阅shellcheck警告SC2068。