Seu código:
upper () {
my_echo "${1}" | tr "[:lower:]" "[:upper:]"
return 0
}
Para fazer isso, leia a entrada padrão se não houver argumentos:
upper () {
( (( $# )) && printf '%s\n' "$@" || cat ) |
tr '[:lower:]' '[:upper:]'
}
Isso testa contra $#
, o número de parâmetros posicionais e, se for zero, usa cat
da leitura do fluxo de entrada padrão, caso contrário, usa printf
nos argumentos posicionais. Isso é canalizado para tr
.
Eu removi return 0
, já que é provável que você queira saber o status real de saída do pipeline.
Em bash
, você pode fazer
upper () {
(( $# )) && printf '%s\n' "${@^^}" || tr '[:lower:]' '[:upper:]'
}
Quando houver argumentos, isso não usará tr
, mas a substituição de ${parameter^^pattern}
do Bash para transformar todos os argumentos em maiúsculos (use ,,
para minúsculas).
Você pode ou não querer alterar a string printf
format para que seja '%s '
em vez de '%s\n'
dependendo do que você deseja alcançar.