如何在for循环中重命名fish中的文件扩展名?

How to rename file extentions in fish in a for loop?

这是我试图转换为 fish:

的等效 bash 脚本
for j in *.md; do mv -v -- "$j" "${j%.md}.txt"; done

这是我尝试过的:

for file in *.md
    mv -v -- "$file" "{{$file}%.md}.txt"
end

但它最终只是像这样重命名所有文件:

‘amazon.md’ -> ‘{{amazon.md}%.md}.txt’

如何正确执行此操作?

我找到了一个替代解决方案:

for file in *.md
    mv -v -- "$file" (basename $file .md).txt 
end

它就像一个魅力!

鱼shell不支持像bash这样的参数扩展操作。鱼的哲学shell到let existing commands do the work instead of re-inventing the wheel。您可以使用 sed 例如:

for file in *.md
    mv "$file" (echo "$file" | sed '$s/\.md$/.txt/')
end

只用鱼来做到这一点:

for j in *.md
    mv -v -- $j (string replace -r '\.md$' .txt $j)
end