ZC1002 - Unquoted Array Expansion
Descrição
Expansão de array $@ ou $* sem aspas pode causar comportamento inesperado.
Exemplo Problemático
#!/bin/zsh
function process_args() {
for arg in $@; do
echo "Processing: $arg"
done
}
process_args "file 1.txt" "file 2.txt"
Problema: Sem aspas, $@ é expandido e sofre word splitting. O argumento "file 1.txt" vira dois argumentos: file e 1.txt.
Solução Correta
#!/bin/zsh
function process_args() {
for arg in "$@"; do
echo "Processing: $arg"
done
}
process_args "file 1.txt" "file 2.txt"
Diferença Entre $@ e $*
| Sintaxe | Comportamento |
|---|---|
"$@" | Cada argumento é mantido separado ($1, $2, etc) |
"$*" | Todos os argumentos são unidos em uma string única |
$@ ou $* | Word splitting ocorre em ambos |
Quando Usar Cada Um
Use "$@" quando quiser preservar argumentos individuais:
#!/bin/zsh
# Correto: repassa todos os argumentos preservando-os
echo_command() {
echo "$@"
}
# Chamar: echo_command "a b" "c d"
# Resultado: a b c d (dois argumentos)
Use "$*" quando quiser unir todos os argumentos:
#!/bin/zsh
# Une todos os argumentos com espaço
log_message() {
echo "[LOG] $*"
}
# Chamar: log_message "a b" "c d"
# Resultado: [LOG] a b c d
Correção Automática
O ZshCheck sugere:
"$@"para arrays de argumentos"$*"quando quiser uma string única