Skip to main content

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 $*

SintaxeComportamento
"$@"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

Referências