Eu tenho uma variável Bash,, $word
que às vezes é uma palavra ou frase, por exemplo:
word="tiger"
Ou:
word="This is a sentence."
Como posso criar uma nova variável Bash que seja igual apenas à primeira letra encontrada na variável? Por exemplo, o acima seria:
echo $firstletter
t
Ou:
echo $firstletter
T
-c
opção no cabeçote POSIX: < unix.com/man-page/posix/1/head >.${word:0:1}
ou${word::1}
.echo "$word" | fold -w1 | head -n 1
,printf '%.1s' "$X"
ouprintf '%c' "$X"
mas todos estão sujeitos a travessuras de caracteres de byte único v.head -c n
, ops.echo "fábio" | head -c 2
dáf�
, então esse é outro problema com isso, eu acho.word="tiger" firstletter=${word:0:1}
fonte
word=something first=${word::1}
fonte
first
está tudo certos
. Você pode ver isso comecho $s
. Se isso não funcionar para você e você quiser ajuda na depuração, copie e cole o (s) comando (s) que você digitou e sua saída.Uma maneira portátil de fazer isso é usar a expansão de parâmetros (que é um recurso POSIX) :
$ word='tiger' $ echo "${word%"${word#?}"}" t
fonte
Com corte:
word='tiger' echo "${word}" | cut -c 1
fonte
Já que você tem uma
sed
tag, aqui está umased
resposta:echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }"
Jogo a jogo para quem gosta disso (eu gosto!):
{
s
: iniciar uma rotina de substituição/
: Comece especificando o que deve ser substituído^\(.\)
: captura o primeiro personagem do Grupo 1.*
:, certifique-se de que o resto da linha estará na substituição/
: comece especificando a substituição\1
: inserir Grupo 1/
: O resto é descartado;
q
: Saiased
para não repetir este bloco para outras linhas, se houver.}
Bem, isso foi divertido!
:)
Você também pode usargrep
e etc, mas se você estiverbash
na${x:0:1}
magia ainda é a melhor solução imo. (Passei uma hora tentando usar a expansão de variável POSIX para fazer isso, mas não consegui:(
)fonte
Usando o bash 4:
x="test" read -N 1 var <<< "${x}" echo "${var}"
fonte