GNU/Linux >> Tutoriales Linux >  >> Linux

Shell =Comprobar si la variable comienza con #

Solución 1:

Tu enfoque original funcionaría bien si escaparas del hash :

$ [[ '#snort' == \#* ]]; echo $?
0

Otro enfoque sería cortar el primer carácter del contenido de la variable, usando "Expansión de subcadena":

if [[ ${x:0:1} == '#' ]]
then
    echo 'yep'
else
    echo 'nope'
fi

yep

Desde la página man de Bash:

   ${parameter:offset}
   ${parameter:offset:length}
          Substring  Expansion.   Expands  to  up  to length characters of
          parameter starting at the character  specified  by  offset.   If
          length  is omitted, expands to the substring of parameter start-
          ing at the character specified by offset.  length and offset are
          arithmetic   expressions   (see  ARITHMETIC  EVALUATION  below).
          length must evaluate to a number greater than or equal to  zero.
          If  offset  evaluates  to  a number less than zero, the value is
          used as an offset from the end of the value  of  parameter.   If
          parameter  is  @,  the  result  is  length positional parameters
          beginning at offset.  If parameter is an array name indexed by @
          or  *,  the  result is the length members of the array beginning
          with ${parameter[offset]}.  A negative offset is taken  relative
          to  one  greater  than the maximum index of the specified array.
          Note that a negative offset must be separated from the colon  by
          at  least  one  space to avoid being confused with the :- expan-
          sion.  Substring indexing is zero-based  unless  the  positional
          parameters are used, in which case the indexing starts at 1.

Solución 2:

Versión compatible con POSIX:

[ "${var%${var#?}}"x = '#x' ] && echo yes

o:

[ "${var#\#}"x != "${var}x" ] && echo yes

o:

case "$var" in
    \#*) echo yes ;;
    *) echo no ;;
esac

Solución 3:

Sé que esto puede ser una herejía, pero para este tipo de cosas prefiero usar grep o egrep en lugar de hacerlo desde el shell. Es un poco más costoso (supongo), pero para mí la legibilidad de esta solución compensa eso. Sin embargo, es una cuestión de gusto personal, por supuesto.

Entonces:

myvar="   #comment asfasfasdf"
if ! echo $myvar | egrep -q '^ *#'
then
  echo "not a comment"
else
  echo "commented out"
fi

Funciona con o sin espacios iniciales. Si también desea tener en cuenta las pestañas iniciales, use egrep -q '^[ \t]*#' en su lugar.


Linux
  1. ¿Transformación automática de nuevas líneas en la asignación de variables de Shell?

  2. Leer valores en una variable de shell desde una tubería

  3. Verifique la conectividad de la base de datos usando el script Shell

  4. Comprobar si existe una variable en una lista en Bash

  5. Automatice mysql_secure_installation con el comando echo a través de un script de shell

Comando Echo en Linux (con ejemplos)

Comando Echo en Linux con ejemplos

comprobar si el argumento es una fecha válida en bash shell

compruebe si el archivo existe en el host remoto con ssh

Shell script cambia de directorio con variable

Agregue una línea al archivo /etc/hosts con script de shell