Ответ 1
initial="$(echo $word | head -c 1)"
Каждый раз, когда вы говорите "первым" в описании проблемы, head
является вероятным решением.
У меня есть переменная Bash, $word
, которая иногда является словом или предложением, например:
word="tiger"
Или:
word="This is a sentence."
Как я могу создать новую переменную Bash, которая равна только первой букве, найденной в переменной? Например, вышеупомянутое будет:
echo $firstletter
t
Или:
echo $firstletter
t
initial="$(echo $word | head -c 1)"
Каждый раз, когда вы говорите "первым" в описании проблемы, head
является вероятным решением.
word="tiger"
firstletter=${word:0:1}
word=something
first=${word::1}
Портативный способ сделать это - использовать расширение параметров (что является функцией POSIX):
$ word='tiger'
$ echo "${word%"${word#?}"}"
t
Поскольку у вас есть тег sed
, вот ответ sed
:
echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }"
Играйте за игрой для тех, кому это нравится (я делаю!):
{
s
: запустите подстановку
/
: Начать, указывая, что должно быть заменено.^\(.\)
: захватить первый символ в группе 1.*
:, убедитесь, что остальная часть строки будет в подстановке/
: начните указывать замену\1
: вставить группу 1/
: Остальное отбрасывается ;
q
: Закройте sed
, чтобы он не повторил этот блок для других строк, если они есть. }
Хорошо, это было весело! :)
Вы также можете использовать grep
и т.д., но если вы находитесь в bash
, магия ${x:0:1}
по-прежнему является лучшим решением imo. (Я потратил час, пытаясь использовать расширение переменной POSIX, но не мог :(
)
С вырезом:
word='tiger'
echo "${word}" | cut -c 1
Использование bash 4:
x="test"
read -N 1 var <<< "${x}"
echo "${var}"