96

我有一个 Bash 变量 ,$word它有时是一个单词或句子,例如:

word="tiger"

或者:

word="This is a sentence."

如何创建一个新的 Bash 变量,该变量仅等于变量中的第一个字母?例如,上面将是:

echo $firstletter
t

或者:

echo $firstletter
T
4

7 回答 7

319
word="tiger"
firstletter=${word:0:1}
于 2012-04-18T21:46:10.650 回答
78
word=something
first=${word::1}
于 2012-04-18T22:03:07.510 回答
43
initial="$(echo $word | head -c 1)"

每次您在问题描述中说“第一”时,head都是一个可能的解决方案。

于 2012-04-18T21:44:00.690 回答
15

一种可移植的方法是使用参数扩展(这是 POSIX 功能)

$ word='tiger'
$ echo "${word%"${word#?}"}"
t
于 2017-07-08T16:45:24.547 回答
7

带切:

word='tiger'
echo "${word}" | cut -c 1
于 2018-08-30T14:59:25.437 回答
2

既然你有一个sed标签,这是一个sed答案:

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

为那些喜欢这些的人玩玩玩(我愿意!):

{

  • s: 开始一个替换例程
    • /: 开始指定要替换的内容
    • ^\(.\):捕获第 1 组中的第一个字符
    • .*:, 确保该行的其余部分将在替换中
    • /: 开始指定替换
    • \1: 插入组 1
    • /: 其余的被丢弃;
  • q:退出sed,因此如果有其他行,它将不会重复此块。

}

那很有趣!:)您也可以使用grep等,但如果您使用bash魔法${x:0:1}仍然是 imo 更好的解决方案。(我花了大约一个小时试图使用 POSIX 变量扩展来做到这一点,但不能:(

于 2017-03-01T18:00:16.857 回答
1

使用 bash 4:

x="test"
read -N 1 var <<< "${x}"
echo "${var}"
于 2017-10-22T05:40:42.167 回答