$ echo --hidden-import={a,b}
--hidden-import=a --hidden-import=b
相比于
echo --hidden-import={$FILES}
--hidden-import={cpu_mon disk_mon mem_mon network_mon}
FILES
创建者
export FILES=$(ls)
在这个例子中我期望得到
--hidden-import=cpu_mon --hidden-import==disk_mon --hidden-import==mem_mon --hidden-import==network_mon
答案1
括号扩展发生在变量扩展之前。如果{$x,$y}
shell 先将其处理为两个参数$x
和$y
,然后才分别扩展每个参数中的变量。如果只有一个项目,则根本不会发生括号扩展;{xy}
始终只保留{xy}
。
如果你正在为 Bash 编写,请改用数组和参数扩展:
files=(*)
echo "${files[@]/#/--hidden-import=}"
此处的#
in${var/#match/replacement}
使其仅在变量开头替换(零长度)匹配字符串。还请注意,使用 来files[@]
获取数组的所有元素,而不仅仅是第一个元素。
如果这不起作用,只需使用循环构建参数列表:
args=()
for file in *; do
args+=("--hidden-import=$file")
done
echo "${args[@]}"
或者,可以使用 Bash 的 printf 一次向多个参数添加前缀/后缀:
printf '--hidden-import=%s\n' * | xargs -d '\n' echo
在最坏的情况下(如果你没有 Bash和如果你已经排除了所有其他 CLI 脚本语言(例如 Perl、Python 甚至 PHP),请尝试 sed:
\ls | sed "s/^/--hidden-import=/" | xargs -d '\n' echo
(故意使用反斜杠来绕过别名,例如“ls -F”。)