GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Shell =Prüfe, ob Variable mit # beginnt

Lösung 1:

Ihr ursprünglicher Ansatz würde gut funktionieren, wenn Sie den Hash umgehen würden :

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

Ein anderer Ansatz wäre das Abschneiden des ersten Zeichens des Variableninhalts mit "Substring Expansion":

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

yep

Von der Bash-Manpage:

   ${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.

Lösung 2:

POSIX-kompatible Version:

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

oder:

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

oder:

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

Lösung 3:

Ich weiß, dass dies Häresie sein mag, aber für solche Dinge würde ich lieber grep oder egrep verwenden, als es aus der Shell heraus zu tun. Es ist etwas teurer (schätze ich), aber für mich gleicht die Lesbarkeit dieser Lösung das aus. Das ist natürlich Geschmackssache.

Also:

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

Es funktioniert mit oder ohne führende Leerzeichen. Wenn Sie auch führende Tabulatoren berücksichtigen möchten, verwenden Sie stattdessen egrep -q '^[ \t]*#'.


Linux
  1. Shell-Skript mit Funktion und Parameter als Variablen?

  2. Spezielle Bash-Parameter mit 4 Beispiel-Shell-Skripten erklärt

  3. Bash-Positionsparameter mit 2 Beispiel-Shell-Skripten erklärt

  4. Alias ​​mit Variable in Bash

  5. Überprüfen Sie, ob das Argument ein gültiges Datum in der Bash-Shell ist

Erste Schritte mit Zsh

Echo-Befehl in Linux (mit Beispielen)

Echo-Befehl in Linux mit Beispielen

Überprüfen Sie, ob eine Variable in einer Liste in Bash vorhanden ist

Automatisieren Sie die mysql_secure_installation mit dem echo-Befehl über ein Shell-Skript

Iterieren Sie mithilfe des Shell-Skripts über die $PATH-Variable