Em ambos os casos, $@
é expandido pelo seu shell atual, antes de executar find
, porque ele está em uma sequência de aspas duplas. Estou supondo que você tenha $1
definido como 1
(execute printf "%s\n" "$@"
para ver os valores atuais dos parâmetros posicionais).
Para executar suas experiências como você espera, você deve usar aspas simples ao redor do comando e aspas duplas em torno de $@
(para evitar divisão extra); por exemplo:
find . -exec sh -c 'ls -l "$@"' sh {} \;