out=tar -tf $1 | awk -F/ '{if (NF<3) print }'
executa a variável de ambiente -tf $1
com out
definida como tar
.
O que você deve realmente fazer é:
list-tar() {
if [[ $1 ]];then
tar -tf "$1" | awk -F/ 'NF<3'
fi
}
Observe a simplificação do programa awk
: a ação padrão é {print}
, então usei NF<3
como a regra que deve ser verdadeira para que a ação aconteça. (As regras não precisam ser /regex/
patterns (cujo padrão é corresponder a $0
).) Um simples grep para linhas com menos de dois caracteres /
também funcionaria.
Note também que capturar a saída em uma variável shell e, em seguida, ecoar é bobagem, a menos que você queira fazer algo com ela. Sua versão também quebra em nomes de arquivos com espaços neles. echo $out
word-splits $out
e, em seguida, echo space-separates multiple arguments. Então, vários espaços em branco se transformam em um único espaço, e você não pode dizer a diferença entre um espaço em um nome de arquivo e dois arquivos separados.
[[ $1 ]]
é uma maneira melhor / mais óbvia de gravar [[ -n $1 ]]
para testar uma variável de shell não vazia. Isso explica algumas das diferenças entre [
e [[
.
As funções do shell podem ser executadas como comandos, portanto, a menos que você tenha algum outro motivo ou esquema de nomenclatura, apenas dê à função o nome abreviado e não se preocupe com o alias.