![每个新循环都有不同的参数值](https://linux22.com/image/203511/%E6%AF%8F%E4%B8%AA%E6%96%B0%E5%BE%AA%E7%8E%AF%E9%83%BD%E6%9C%89%E4%B8%8D%E5%90%8C%E7%9A%84%E5%8F%82%E6%95%B0%E5%80%BC.png)
这是针对 webp 使用的cwebp
,我正在测试所有不同可能的品质,给出:
cwebp -q 75 file.jpeg -o file.webp
我想要一个像这样的循环:
for i in {1..4}; do cwebp -q ?? file.jpeg -o file.webp; done
在哪里 ??应针对特定值进行更改,例如:
- 第一个循环 75
- 第二次循环 80
- 第三圈 85
- 第四圈90
如何实现自动化,这样我就不需要输入 4 次相同的命令并更改每次的参数
- 我想要一行或脚本中的 bash 命令,而不是任何其他编程语言。
- 我不确定正确的命令是
for
,while
还是另一个
答案1
看起来你想要的是这样的:
for i in 75 80 85 90; do cwebp -q "$i" file.jpeg -o file.webp; done
虽然这每次都会覆盖输出文件,所以您可能希望使用输出文件名中的质量:
for i in 75 80 85 90; do cwebp -q "$i" file.jpeg -o file-"$i".webp; done
如果值 75、...、90 不是任意的,并且您知道将以 Z 的步长从 X 开始并在 Y 结束,则可以使用大括号扩展或者算术for
循环生成这些值:
for i in {75..90..5}; do cwebp -q "$i" file.jpeg -o file-"$i".webp; done
for ((i = 75; i <= 90; i += 5)); do cwebp -q "$i" file.jpeg -o file-"$i".webp; done
答案2
您也可以尝试使用seq
for i in $(seq 75 90 5); do cwebp -q "$i" file.jpeg -o file-"$i".webp; done