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 (abcEste é 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 &abcEstes são dois comandos:./scriptiniciado 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