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


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

word="tiger"

или:

word="This is a sentence."

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

echo $firstletter
t

или:

echo $firstletter
T
7 60

7 ответов:

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

каждый раз, когда вы говорите "первый" в вашем описании проблемы, head является вероятным решением.

word="tiger"
firstletter=${word:0:1}
word=something
first=${word::1}

портативный способ сделать это-использовать расширения параметр (который является отличительной особенностью стандарта POSIX):

word='tiger'
first="${word%"${word#?}"}"

так как у вас есть sed тег здесь sed ответ:

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

играть по игре для тех, кто любит те (я делаю!):

{

  • s: запуск процедуры замены
    • /: начните указывать, что должно быть заменено
    • ^\(.\): захват первого символа в группе 1
    • .*: убедитесь, что остальная часть линии будет в подмена
    • /: начните указывать замену
    • : вставить группу 1
    • /: остальное отбрасывается;
  • q: выход sed поэтому он не будет повторять этот блок для других строк, если они есть.

}

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

используя bash 4:

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

с вырезом :

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