103 votes

Comment obtenir la première lettre d'une variable Bash ?

J'ai une variable Bash, $word qui est parfois un mot ou une phrase, par exemple :

word="tiger"

Ou bien :

word="This is a sentence."

Comment puis-je créer une nouvelle variable Bash qui ne soit égale qu'à la première lettre trouvée dans la variable ? Par exemple, ce qui précède serait :

echo $firstletter
t

Ou bien :

echo $firstletter
T

327voto

Karoly Horvath Points 45145
word="tiger"
firstletter=${word:0:1}

12 votes

Exactement ce que je cherchais. Une seule ligne, sans engendrer de sous-coquilles. Prenez mon vote !

84voto

Adam Liss Points 27815
word=something
first=${word::1}

1 votes

Ce serait merveilleux, mais cela ne fonctionne pas pour moi, ni en bash 4.3.11, ni en zsh 5.0.5.

1 votes

Avec GNU bash v4.3.11, first est fixée à la lettre s . Vous pouvez le voir avec echo $s . Si cela ne fonctionne pas et que vous souhaitez de l'aide pour le débogage, veuillez copier et coller la ou les commandes que vous avez tapées et leur résultat.

2 votes

Merci Adam, c'est ma faute, je n'arrive pas à comprendre pourquoi ça ne fonctionnait pas pour moi avant, mais ça fonctionne parfaitement maintenant sur toutes les versions de bash que j'ai essayées, en remontant jusqu'à GNU bash, v3.1.0. Cela ne fonctionne toujours pas dans zsh, mais la question est étiquetée "bash", donc cela n'a pas d'importance.

44voto

thiton Points 21303
initial="$(echo $word | head -c 1)"

Chaque fois que vous dites "premier" dans la description de votre problème, head est une solution probable.

8 votes

Veuillez noter qu'il n'y a pas de -c dans l'en-tête POSIX : < unix.com/man-page/posix/1/head >.

10 votes

Cette méthode renvoie bien la première lettre, mais elle est excessive et la solution dépend d'utilitaires externes (head). Cela peut être fait en shell pur, ce qui est plus propre.

29 votes

Cette réponse ne devrait pas être acceptée, pour les raisons indiquées dans les commentaires ci-dessus. Les vraies réponses se trouvent ci-dessous - ${word:0:1} o ${word::1} .

16voto

Mateusz Piotrowski Points 3815

Une façon portable de le faire est d'utiliser l'expansion des paramètres (qui est une fonctionnalité POSIX) :

$ word='tiger'
$ echo "${word%"${word#?}"}"
t

0 votes

Les autres réponses, plus raisonnables à utiliser, sont les suivantes :: mais je ne peux pas ne pas upvoter un tel abus d'expansion. C'est bien fait.

0 votes

C'est souvent dans le cas où vous auriez besoin d'utiliser un environnement de script qui impose, en fait, POSIX sh , pas bash (bien que cela ne fasse pas partie de la question)

7voto

Franckyz Points 71

Avec coupe :

word='tiger'
echo "${word}" | cut -c 1

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