Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用参数组合启动脚本_Bash_Permutation - Fatal编程技术网

Bash 使用参数组合启动脚本

Bash 使用参数组合启动脚本,bash,permutation,Bash,Permutation,我正在运行一些测试,需要结合一些输入运行一个particolarshell脚本 假设我有一个脚本test.sh,它包含3个参数:A、B、C A可以是1或2,B可以是“aa”或“bb”,C可以是7或8 我想自动启动所有可能的组合,所以 ./test 1 "aa" 7 ./test 1 "aa" 8 ./test 1 "bb" 7 ./test 1 "bb" 8 ./test 2 "aa" 7 ./test 2 "aa" 8 ./test 2 "bb" 7 ./test 2 "bb" 8 有什么东

我正在运行一些测试,需要结合一些输入运行一个particolarshell脚本

假设我有一个脚本
test.sh
,它包含3个参数:A、B、C

A可以是1或2,B可以是“aa”或“bb”,C可以是7或8

我想自动启动所有可能的组合,所以

./test 1 "aa" 7
./test 1 "aa" 8
./test 1 "bb" 7
./test 1 "bb" 8
./test 2 "aa" 7
./test 2 "aa" 8
./test 2 "bb" 7
./test 2 "bb" 8
有什么东西已经准备好并经过测试了吗


编辑:排列->组合

您可以使用3个循环:

for x in 1 2; do
  for y in "aa" "bb"; do
    for z in 7 8; do
      ./test $x $y $z
    done
  done
done
试运行:

$ for x in 1 2; do
>   for y in "aa" "bb"; do
>     for z in 7 8; do
>       echo $x $y $z
> done;done;done
1 aa 7
1 aa 8
1 bb 7
1 bb 8
2 aa 7
2 aa 8
2 bb 7
2 bb 8

现在有一种方法可以将它们浓缩到一个for循环中,如果您愿意,您可能需要等待另一个答案。

您可以使用3个for循环:

for x in 1 2; do
  for y in "aa" "bb"; do
    for z in 7 8; do
      ./test $x $y $z
    done
  done
done
试运行:

$ for x in 1 2; do
>   for y in "aa" "bb"; do
>     for z in 7 8; do
>       echo $x $y $z
> done;done;done
1 aa 7
1 aa 8
1 bb 7
1 bb 8
2 aa 7
2 aa 8
2 bb 7
2 bb 8
现在可能有一种方法可以将它们压缩到一个for循环中,如果您愿意的话,您可能需要等待另一个答案。

有些丑陋(ab)的shell brace扩展使用允许:

$ for i in {1,2}\ {aa,bb}\ {7,8}; do
    echo {$i}
done
{1 aa 7}
{1 aa 8}
{1 bb 7}
{1 bb 8}
{2 aa 7}
{2 aa 8}
{2 bb 7}
{2 bb 8}
但这仅在单个值不包含空格或shell/glob元字符时有效

如果它们可以包含其中任何一种,则这是不安全的,应避免使用。

有些丑陋(ab)的外壳支撑扩展允许:

$ for i in {1,2}\ {aa,bb}\ {7,8}; do
    echo {$i}
done
{1 aa 7}
{1 aa 8}
{1 bb 7}
{1 bb 8}
{2 aa 7}
{2 aa 8}
{2 bb 7}
{2 bb 8}
但这仅在单个值不包含空格或shell/glob元字符时有效


如果它们可以包含其中任何一种,那么这是不安全的,应该避免使用。

这种组合,而不是排列。排列意味着你改变了事物列表的顺序,比如
abc
abc
abc
,等等。谢谢:)我编辑了这个问题。这是组合,不是排列。排列意味着你改变了事物列表的顺序,如
abc
abc
abc
,等等。谢谢:)我编辑了这个问题。@chepner谢谢,但支撑是按原意做的。重点是显示条目的分组。(我几乎添加了
printf'[%s]\n'
来显示它们是如何分开的单词,但我认为这太过分了。)哦,对不起。这就是我从一开始就做了一个看起来很小的修正所得到的。@chepner谢谢,但支撑是按预期的。重点是显示条目的分组。(我几乎添加了
printf'[%s]\n'
来显示它们是如何分开的单词,但我认为这太过分了。)哦,对不起。这就是我从一开始就做了一个看起来很小的修正所得到的。