我经常在命令行上使用参数扩展,例如
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