Isso não usa o grep, mas como ponto de referência, você pode usar o operador condicional =~
do bash para comparar o primeiro argumento do script com a classe de expressão regular para um name
, que é definido pelo Manual de Referência do Bash como:
A word consisting solely of letters, numbers, and underscores, and beginning with a letter or underscore. Names are used as shell variable and function names.
$ cat isvarname
#!/bin/bash
if [ "$#" -ne 1 ]
then
echo "Usage: $0 a-string"
exit 1
fi
if [[ "$1" =~ ^[[:alpha:]_][[:alnum:]_]*$ ]]
then
echo yes
else
echo no
fi