运行 命令的模式扩展

Pattern expansion to run commands

知道我能够 运行 echomv 来扩展像这样的模式:echo {0..9}{A..Z}。我很想知道除了 运行 命令之外是否还有其他方法可以做到这一点?

docker-compose {stop,rm,up -d}

上面的例子不起作用,但是有一些方法可以做到这一点(运行 停止,rm 和 up 分开)?

不是你说的那样。

Brace expansion 出现在任何其他扩展之前。这意味着当您说 echo {0,1}{a,b} 时,Bash 在执行任何其他步骤之前展开大括号。这样,它就变成了echo 0a 0b 1a 1b一条命令

当您提到 docker-compose {stop,rm,up -d} 时,请注意这将扩展为单个命令:docker-compose stop rm up -d,这似乎无效。

您似乎想要 运行 三个不同的命令:

docker-compose stop
docker-compose rm
docker-compose up -d

为此,您可能需要使用循环(注意 "up -d" 被引用以便将其视为单个参数):

for argument in stop rm "up -d"
do
    docker-compose $argument
done

您可以使用 eval:

eval docker-compose\ {stop,rm,'up -d'}\;

但是需要小心escaping/quoting。只需使用 echo 而不是 docker 来测试它是否发出正确的命令:

$ echo docker-compose\ {stop,rm,'up -d'}\;
docker-compose stop; docker-compose rm; docker-compose up -d;