Tengo una variable Bash $word
, que a veces es una palabra u oración, por ejemplo:
word="tiger"
O:
word="This is a sentence."
¿Cómo puedo hacer una nueva variable Bash que sea igual a solo la primera letra que se encuentra en la variable? Por ejemplo, lo anterior sería:
echo $firstletter
t
O:
echo $firstletter
T
-c
opción en el encabezado POSIX: < unix.com/man-page/posix/1/head >.${word:0:1}
o${word::1}
.echo "$word" | fold -w1 | head -n 1
,printf '%.1s' "$X"
oprintf '%c' "$X"
pero estos son todos sujetos a una sola v. Chanchullos varios caracteres de bytes.head -c n
, ¡Ups!echo "fábio" | head -c 2
daf�
, entonces ese es otro problema con esto, supongo.word="tiger" firstletter=${word:0:1}
fuente
word=something first=${word::1}
fuente
first
se ajusta a la letras
. Puedes verlo conecho $s
. Si eso no funciona para usted y desea ayuda con la depuración, copie y pegue los comandos que escribió y su salida.Una forma portátil de hacerlo es utilizar la expansión de parámetros (que es una función POSIX) :
$ word='tiger' $ echo "${word%"${word#?}"}" t
fuente
Con corte:
word='tiger' echo "${word}" | cut -c 1
fuente
Dado que tiene una
sed
etiqueta, aquí hay unased
respuesta:echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }"
Juego a juego para los que disfrutan (¡yo sí!):
{
s
: inicia una rutina de sustitución/
: Empiece a especificar qué se va a sustituir^\(.\)
: captura el primer personaje del Grupo 1.*
:, asegúrese de que el resto de la línea estará en la sustitución/
: comience a especificar el reemplazo\1
: insertar Grupo 1/
: El resto se descarta;
q
: Salgased
para que no se repita este bloque para otras líneas si las hay.}
¡Bueno eso fue divertido!
:)
También puede usargrep
y etc., pero si está enbash
la${x:0:1}
magia, es la mejor solución en mi opinión. (Pasé como una hora tratando de usar la expansión de variables POSIX para hacer eso, pero no pude:(
)fuente
Usando bash 4:
x="test" read -N 1 var <<< "${x}" echo "${var}"
fuente