choroba explicou muito bem que seu problema é com o script de shell usando-se como intérprete em vez de bash .
Aqui está uma sugestão para a reimplementação do seu script que
-
Não contém erros de sintaxe ( dirFocus = "" é, por exemplo, um erro de sintaxe em que = não deve ter espaços ao redor em uma atribuição).
-
Lida com nomes de arquivos que possuem espaços e novas linhas (o loop na saída de ls desqualifica qualquer nome de arquivo, da mesma forma wc -w teria a contagem errada se algum nome de arquivo contivesse espaços).
-
Usa sintaxe moderna de shell ( $[ $i + 1 ] é obsoleta bash sintaxe).
-
Apresenta melhorias minúsculas na saída (adiciona (dir) aos nomes dos diretórios).
#!/bin/bash
shopt -s dotglob # make wildcards match hidden names by default
shopt -s nullglob # make wildcards expand to nothing if no match
count=0
for name in "${1:-.}"/*; do
count=$(( count + 1 ))
if [ -d "$name" ]; then
printf '%d : %s (dir)\n' "$count" "${name##*/}"
else
printf '%d : %s\n' "$count" "${name##*/}"
fi
done
Isso também não expande a lista de arquivos mais de uma vez, enquanto seu código faz um ls em todo o diretório para cada nome no diretório.
${1:-.} significa "use o que está em $1 , a menos que esteja vazio ou não definido, caso contrário use . ".
${name##*/} significa "a string em $name , mas sem o bit até o último / ".