令我惊讶的是,我在1小时后找不到答案.我想将一个数组传递给我的脚本,如下所示:
test.sh argument1 array argument2
Run Code Online (Sandbox Code Playgroud)
我不想把它放在另一个bash脚本中,如下所示:
array=(a b c)
for i in "${array[@]}"
do
test.sh argument1 $i argument2
done
Run Code Online (Sandbox Code Playgroud) 鉴于文档和对较早问题的评论,根据要求,我制作了一个最小的可重现示例,演示了这两个语句之间的区别:
my %*SUB-MAIN-OPTS = :named-anywhere;
PROCESS::<%SUB-MAIN-OPTS><named-anywhere> = True;
Run Code Online (Sandbox Code Playgroud)
给定一个只有这个的脚本文件:
#!/usr/bin/env raku
use MyApp::Tools::CLI;
Run Code Online (Sandbox Code Playgroud)
以及 MyApp/Tools 中名为 CLI.pm6 的模块文件:
#PROCESS::<%SUB-MAIN-OPTS><named-anywhere> = True;
my %*SUB-MAIN-OPTS = :named-anywhere;
proto MAIN(|) is export {*}
multi MAIN( 'add', :h( :$hostnames ) ) {
for @$hostnames -> $host {
say $host;
}
}
multi MAIN( 'remove', *@hostnames ) {
for @hostnames -> $host {
say $host;
}
}
Run Code Online (Sandbox Code Playgroud)
从命令行进行以下调用不会产生可识别的子例程,但会显示用法:
mre.raku add -h=localhost -h=test1
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,切换my %*SUB-MAIN-OPTS = :named-anywhere;为PROCESS::<%SUB-MAIN-OPTS><named-anywhere> = True; …