Citações.
No script, use "$1"
em vez de apenas $1
.
Na linha de comando, use
./script '*(ontehu'
em vez de
./script *(ontehu
-
./script.sh (abc
Este é um erro de sintaxe na gramática da shell. -
./script.sh &&
Isso faz com que o shell pense que existe um AND condicional na linha de comando e espera algo do lado direito do operador&&
. -
./script.sh &abc
Estes são dois comandos:./script
iniciado como um processo em segundo plano (com&
) e o comandoabc
.
Em todos esses casos, o argumento deve ser citado (entre aspas, idealmente, a menos que você precise que o shell insira o valor de uma variável shell, caso em que deve ser citado em duplicidade).
Seu script:
if [[ $1 =~ ^[A-Za-z_]+$ ]]; then
echo it matches
else
echo does_not match
fi
Citar $1
:
if [[ "$1" =~ ^[A-Za-z_]+$ ]]; then
echo it matches
else
echo does_not match
fi
Permitir dígitos no final do valor:
if [[ "$1" =~ ^[A-Za-z_][A-Za-z0-9_]+$ ]]; then
echo it matches
else
echo does_not match
fi
Faça um relatório adequado dos erros (isso é extra):
if [[ "$1" =~ ^[A-Za-z_][A-Za-z0-9_]+$ ]]; then
printf '"%s" is a valid variable name\n' "$1"
else
printf '"%s" is not a proper variable name\n' "$1" >&2
exit 1
fi