结合大括号扩展和输出重定向

结合大括号扩展和输出重定向

我经常在命令行上使用参数扩展,例如

cp a.{ext1,ext2}

扩展到

cp a.ext1 a.ext2

但是,在很多情况下我不使用cp,而是使用另一个工具,我们称之为cat,我会做一些输出重定向,例如

cat a.ext1 > a.ext2

就我而言a,可能会有所不同,或者会很长,所以我希望能够使用某种大括号扩展,至少只需要a在一行中出现一次。我怎样才能得到它?

我专门使用

$ bash --version
GNU bash, version 3.2.51(1)

但使用其他 shell 的答案也值得赞赏。

答案1

您可以输入:

$ cat very-long-filename.ext1Ctrl+WCtrl+Y>Ctrl+YBackspace2

或者:

$ cat very-long-filename.Ctrl+WCtrl+Yext1>Ctrl+Yext2

要真正使用大括号扩展,请注意:

cat a.ext1 > a.ext2

也可以写成:

cat > a.ext2 a.ext1

但是你不能这样做:

cat > a.ext{2,1}

但是,您可以这样做:

eval cat \> a.ext{2,1}

在 中zsh,您还可以使用匿名函数:

(){cat $1 > $2} a.ext{1,2}

或者:

(){cat ${1}1 > ${1}2} a.ext

答案2

关于什么:-

f=really-long-filename; cat "$f.ext1" > "$f.ext2"

答案3

使用 shell 函数

 xyx () { cat "$1".$2 > "$1".$3; }

然后

xyz fie foo fum

扩展到

cat fee.foo > fee.fum

相关内容