Esta é uma prática padrão para shells. A ordem das operações é a substituição de comando ( $(find .)
), a divisão de palavras e a expansão glob ( /home/user/*
).
Do padrão POSIX (divisão de palavras = divisão de campos; expansão glob = nome do caminho expansão):
The order of word expansion shall be as follows:
Tilde expansion (see Tilde Expansion), parameter expansion (see Parameter Expansion), command substitution (see Command Substitution), and arithmetic expansion (see Arithmetic Expansion) shall be performed, beginning to end. See item 5 in Token Recognition.
Field splitting (see Field Splitting) shall be performed on the portions of the fields generated by step 1, unless IFS is null.
Pathname expansion (see Pathname Expansion) shall be performed, unless set -f is in effect.
Quote removal (see Quote Removal) shall always be performed last.
Por esse motivo, é sempre recomendável usar globs sempre que possível, para que a divisão de palavras não interfira nos nomes dos arquivos. A construção $(find)
é na verdade um exemplo de Bash Pitfall # 1 .