Esse é o tipo de coisa que as funções são feitas para:
print_if_not_regular() {
[ -f "$1" ] || printf '%s\n' "$1"
}
print_if_not_regular /root/.bash_aliases
Algumas conchas como es ou zsh têm funções anônimas:
(){[ -f "$1" ] || printf '%s\n' $1} /root/.bash_aliases # zsh
@ {[ -f $1 ] || printf '%s\n' $1} /root/.bash_aliases # es
Eu evitaria usar $_ . Não funciona mais se você tiver uma armadilha DEBUG por exemplo.
$ bash -c 'trap ": \"\$((cmdcount+=1))\"" DEBUG; echo foo; echo "$_"'
foo
2
Note que !:n não é o argumento n th do último comando, mas o n th token léxico da linha de comando anterior (a última linha (possivelmente mesmo multilinha) armazenada na história). Por exemplo, em
echo $(echo A B)
echo foo; echo !:1
Esse !:1 não é expandido para foo (o último argumento do último comando), nem B (o último argumento do comando echo do comando echo da linha de comando anterior), mas $(echo A B) . Aqui você precisa inserir:
[ -f /root/.bash_aliases ] ||
echo !:2
Isto é, insira-o em linhas separadas. Aqui, acontece de funcionar (por acidente) mesmo que a linha do histórico não esteja totalmente concluída no momento em que você entra na segunda linha. Esse mesmo truque não funciona em (t)csh (de onde vem as expansões do histórico), nem em zsh .