96 votes

Comment vérifier le premier caractère d'une chaîne de caractères dans le shell Bash ou Unix ?

J'écris un script sous Unix où je dois vérifier si le premier caractère d'une chaîne est "/" et si c'est le cas, bifurquer.

Par exemple, j'ai une chaîne de caractères :

/some/directory/file

Je veux que ça renvoie 1, et :

server@10.200.200.20:/some/directory/file

pour retourner 0.

167voto

user000001 Points 12050

Il existe de nombreuses façons de procéder. Vous pouvez utiliser des caractères génériques entre doubles crochets :

str="/some/directory/file"
if [[ $str == /* ]]; then echo 1; else echo 0; fi

Vous pouvez utiliser l'expansion de sous-chaîne :

if [[ ${str:0:1} == "/" ]] ; then echo 1; else echo 0; fi

Ou une regex :

if [[ $str =~ ^/ ]]; then echo 1; else echo 0; fi

19voto

konsolebox Points 21338

Considérez également l'instruction case qui est compatible avec la plupart des shells basés sur sh :

case $str in
/*)
    echo 1
    ;;
*)
    echo 0
    ;;
esac

11voto

devnull Points 45016
$ foo="/some/directory/file"
$ [ ${foo:0:1} == "/" ] && echo 1 || echo 0
1
$ foo="server@10.200.200.20:/some/directory/file"
$ [ ${foo:0:1} == "/" ] && echo 1 || echo 0
0

8voto

Ciro Santilli Points 3341

cut -c1

C'est POSIX, et contrairement à case il extrait en fait le premier caractère si vous en avez besoin pour plus tard :

myvar=abc
first_char="$(printf '%s' "$myvar" | cut -c1)"
if [ "$first_char" = a ]; then
  echo 'starts with a'
else
  echo 'does not start with a'
fi

awk substr est une autre commande POSIX, mais une alternative moins efficace :

printf '%s' "$myvar" | awk '{print substr ($0, 0, 1)}'

printf '%s' est d'éviter les problèmes liés aux caractères d'échappement : Bash printf littéral chaîne verbatim par exemple,

myvar='\n'
printf '%s' "$myvar" | cut -c1

sorties \ comme prévu.

${::} ne semble pas être POSIX.

Voir aussi : Comment extraire les deux premiers caractères d'une chaîne de caractères en script shell ?

1voto

naqviO7 Points 21

Code :

 place="Place"
 fchar=${place:0:1}
 echo $fchar

Sortie :

P

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X