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
.