Mam zmienną Bash $word
, która czasami jest słowem lub zdaniem np:
word="tiger"
Lub:
word="This is a sentence."
Jak mogę utworzyć nową zmienną Bash, która jest równa tylko pierwszej literze znalezionej w zmiennej? Np. Powyższe byłoby:
echo $firstletter
t
Lub:
echo $firstletter
T
-c
w nagłówku POSIX nie ma opcji: < unix.com/man-page/posix/1/head >.${word:0:1}
lub${word::1}
.echo "$word" | fold -w1 | head -n 1
,printf '%.1s' "$X"
alboprintf '%c' "$X"
, ale te są przedmiotem pojedynczej v. Wielo shenanigans znaków bajt.head -c n
, ups.echo "fábio" | head -c 2
dajef�
, więc to chyba kolejny problem z tym.word="tiger" firstletter=${word:0:1}
źródło
word=something first=${word::1}
źródło
first
jest ustawiony na literęs
. Możesz to zobaczyćecho $s
. Jeśli to nie zadziała i chcesz pomóc w debugowaniu, skopiuj i wklej wpisane polecenia i ich wyniki.Przenośnym sposobem na to jest użycie rozszerzania parametrów (co jest funkcją POSIX) :
$ word='tiger' $ echo "${word%"${word#?}"}" t
źródło
Z krojem:
word='tiger' echo "${word}" | cut -c 1
źródło
Ponieważ masz
sed
tag, otosed
odpowiedź:echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }"
Graj przez grę dla tych, którzy je lubią (ja!):
{
s
: rozpocznij procedurę zastępowania/
: Rozpocznij określanie, co ma zostać zastąpione^\(.\)
: złap pierwszą postać z grupy 1.*
:, upewnij się, że reszta linii będzie w zamianie/
: rozpocznij określanie zamiany\1
: wstaw grupę 1/
: Reszta jest odrzucana;
q
: Zakończ,sed
aby nie powtórzył tego bloku dla innych linii, jeśli takie istnieją.}
To była zabawa!
:)
Można również użyćgrep
i etc, ale jeśli jesteś wbash
tej${x:0:1}
magii jest jeszcze lepszym rozwiązaniem imo. (Spędziłem około godziny próbując użyć do tego celu rozwijania zmiennych POSIX, ale nie mogłem:(
)źródło
Korzystanie z bash 4:
x="test" read -N 1 var <<< "${x}" echo "${var}"
źródło