Com o bash, defina as configurações de glob para que as correspondências ausentes não acionem um erro:
shopt -u failglob # avoid failure report (and discarding the whole line).
shopt -s nullglob # remove (erase) non-matching globs.
ls ?c c?
O ponto de interrogação é um caractere glob que representa um único caractere. Como você deseja nomes de arquivos de dois caracteres, um deles deve ser um c
e, portanto, é o primeiro caractere ou o último caractere.
Com shopt -s dotglob
, isso também mostraria um arquivo chamado .c
.
Se não houver arquivos correspondentes, a configuração dessas opções de shell faz com que todos os argumentos sejam removidos, resultando em um ls
- listando qualquer coisa / tudo por padrão.
Use isso, em vez disso:
shopt -s nullglob ## drop any missing globs
set -- ?c c? ## populate the $@ array with (any) matches
if [ $# -gt 0 ] ## if there are some, list them
ls -d "$@"
fi