Como uma alternativa para a expansão de chaves, você pode usar os recursos expansão do histórico do shell bash:
-
!
introduz uma expansão de histórico
-
#
event designator denotando o comando atual
-
$
designador de palavras referindo-se ao último argumento
Você pode realizar substituições na expansão usando uma sintaxe% sed-like s/pattern/replacement
, por exemplo.
somecommand path/to/foo.bar !#$:s/.bar/.baz
Ex.
$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'
Se você quer o caminho especificamente (por exemplo, para mv
um arquivo para um nome completamente diferente que não é facilmente obtido por substituição), você pode usar o modificador h
:
$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'
Para outras opções, incluindo readline
combinações de teclas para extrair o último argumento, consulte Como repetir o parâmetro digitado atualmente no console do bash?