Вопрос по bash – Как получить первую букву в переменной Bash?

69

У меня есть переменная Bash,$word, которое иногда является словом или предложением, например:

word="tiger"

Или же:

word="This is a sentence."

Как я могу создать новую переменную Bash, которая равна только первой букве, найденной в переменной? Например, выше будет:

echo $firstletter
t

Или же:

echo $firstletter
T

Ваш Ответ

7   ответов
2

С вырезом:

word='tiger'
echo "${word}" | cut -c 1
214
word="tiger"
firstletter=${word:0:1}
Именно то, что я искал. Однострочник, без нерестовых подоболочек. Возьми мой голос!
2

sed тег здесьsed ответ:

echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }"

Игра за игрой для тех, кто любит это (я делаю!):

{

s: start a substitution routine /: Start specifying what is to be substituted ^\(.\): capture the first character in Group 1 .*:, make sure the rest of the line will be in the substitution /: start specifying the replacement \1: insert Group 1 /: The rest is discarded; q: Quit sed so it won't repeat this block for other lines if there are any.

}

Ну, это было весело!:) Вы также можете использоватьgrep и т. д., но если вы находитесь вbash ${x:0:1} магия все еще лучшее решение, имхо. (Я потратил целый час, пытаясь использовать для этого расширение переменных POSIX, но не смог:( )

Error: User Rate Limit Exceededstackoverflow.com/a/44988512/4694621
66
word=something
first=${word::1}
Спасибо за продолжение и подтверждение! Рад, что это работает для вас.
С GNU Bash v4.3.11,first установлен на буквуs, Вы можете увидеть это сecho $s, Если это не работает для вас, и вам нужна помощь в отладке, скопируйте и вставьте введенные вами команды и их вывод.
Это было бы замечательно, но у меня не работает ни в bash 4.3.11, ни в zsh 5.0.5
Спасибо Адам, мой плохой, я не могу понять, почему он не работал для меня раньше, но теперь он отлично работает на нескольких версиях bash, которые я пробовал, возвращаясь к GNU bash, v3.1.0. Все еще не работает в zsh, но вопрос помечен как «bash», так что это не имеет значения.
23
initial="$(echo $word | head -c 1)"

head это вероятное решение.

Error: User Rate Limit Exceededecho "$word" | fold -w1 | head -n 1, printf '%.1s' "$X"Error: User Rate Limit Exceededprintf '%c' "$X"Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded-cError: User Rate Limit Exceededunix.com/man-page/posix/1/headError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded${word:0:1}Error: User Rate Limit Exceeded${word::1}.
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

x="test"
read -N 1 var <<< "${x}"
echo "${var}"
7

Похожие вопросы