GNU/Linux >> Tutoriels Linux >  >> Linux

Shell =Vérifier si la variable commence par #

Solution 1 :

Votre approche originale fonctionnerait très bien si vous échappiez au hachage :

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

Une autre approche consisterait à découper le premier caractère du contenu de la variable, en utilisant "Substring Expansion":

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

yep

À partir de la page de manuel 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.

Solution 2 :

Version compatible POSIX :

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

ou :

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

ou :

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

Solution 3 :

Je sais que cela peut être une hérésie, mais pour ce genre de choses, je préfère utiliser grep ou egrep plutôt que de le faire depuis le shell. C'est un peu plus coûteux (je suppose) mais pour moi, la lisibilité de cette solution compense cela. C'est une question de goût personnel, bien sûr.

Donc :

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

Il fonctionne avec ou sans espaces principaux. Si vous souhaitez également tenir compte des tabulations principales, utilisez plutôt egrep -q '^[ \t]*#'.


Linux
  1. Transformation automatique des nouvelles lignes dans l'affectation de variables Shell ?

  2. Paramètres spéciaux de Bash expliqués avec 4 exemples de scripts Shell

  3. Paramètres positionnels de Bash expliqués avec 2 exemples de scripts Shell

  4. Alias ​​avec variable dans bash

  5. Vérifier si une variable existe dans une liste dans Bash

Commande Echo sous Linux (avec exemples)

Commande Echo sous Linux avec exemples

vérifier si le fichier existe sur l'hôte distant avec ssh

Répertoire de changement de script shell avec variable

Ajouter une ligne au fichier /etc/hosts avec le script shell

Itérer sur la variable $ PATH à l'aide d'un script shell