例如:命令( - 选项* 4次)
我可以在这里使用for循环吗?请建议!
换句话说
command --option1 --option2 --option3 --option3 --option3
所以我想在循环中使用option3。
答案 0 :(得分:1)
请参阅BashFAQ #50,了解为什么天真尝试解决此问题的尝试经常失败(或者最初似乎有效,但在使用更有趣的数据或更有问题的情况时失败)。
遵循最佳做法谨慎的做法可能如下:
#!/usr/bin/env bash
number_of_option3s=4
args=( )
for ((i=0; i<number_of_option3s; i++)); do
args+=( --option3 )
done
your_command --option1 --option2 "${args[@]}"
据推测,在一个真实世界的用例中,您要修改args+=( --option="$i" )
或迭代文件名并执行for file in *.txt; do args+=( --input "$file" ); done
之类的操作;所有这些都可行。
如果您没有使用bash运行,而是需要使用/bin/sh
,那么这会变得更加丑陋:
#!/bin/sh
# need to use a function since there's only one array, "$@", but it has a separate
# instance per stack depth.
call_with_repeated_option() {
number_of_options=$1; shift
option_to_append=$1; shift
i=0
while [ "$i" -lt "$number_of_options" ]; do
set -- "$@" "$option_to_append"
i=$((i + 1))
done
"$@"
}
# call your_command with 4 "--option3" arguments after --option1 and --option2
call_with_repeated_option 4 --option3 your_command --option1 --option2
答案 1 :(得分:-2)
使用:
echo "--option"{0..3}
--option0 --option1 --option2 --option3
echo "--option"{1,2,3,3,3}
--option1 --option2 --option3 --option3 --option3
这里,使用“--option”调用命令echo,粘贴到(0到3)扩展的结果,或者在第二种情况下,使用逗号分隔的元素列表。
echo "--option"{1..13..4}
--option1 --option5 --option9 --option13
这个相关的构造是按4读取1到13.
达菲爵士在命令中提出的要求是一个不同的问题,但很容易以类似的方式解决:
echo command $(echo "--option=\""{a.file,b.file,d.file,e.file}"\"" )
command --option="a.file" --option="b.file" --option="d.file" --option="e.file"