如何在 bash 中一次替换多个子字符串?

kub*_*lay 5 bash shell-script replace

我有一个目录包含要在 bash 中回显的图像文件。在回显时,我想在单行命令中替换文件名和扩展名。

示例文件:

images/file_name_1.jpg
images/file_name_2.jpg
Run Code Online (Sandbox Code Playgroud)

通常,我可以像这样进行单一替换:

images/file_name_1.jpg
images/file_name_2.jpg
Run Code Online (Sandbox Code Playgroud)

输出变成这样:

for i in images/*; do echo ${i/file/image}; done
Run Code Online (Sandbox Code Playgroud)

如何将其保留在 for 循环中并将“jpg”字符串也替换为“png”?这只是一个例子,我可以将点替换为逗号等。

当我尝试这个时:

images/image_name_1.jpg
images/image_name_2.jpg
Run Code Online (Sandbox Code Playgroud)

这不起作用。我找不到任何其他解决方案或想法。这可能吗?如果可以,怎么做?

use*_*ser 4

简单的方法是将结果分配给一个变量,然后使用该变量。例子:

for filename in images/*
do
    echo "filename is now $filename"
    filename=${filename/jpg/png}; echo "filename is now $filename"
    filename=${filename/file/image}; echo "filename is now $filename"
    echo "final filename is ${filename}"
done
Run Code Online (Sandbox Code Playgroud)