如何获取Bash变量中的第一个字母?

Vil*_*age 75 bash text-processing variable-expansion

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

word="tiger"
Run Code Online (Sandbox Code Playgroud)

要么:

word="This is a sentence."
Run Code Online (Sandbox Code Playgroud)

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

echo $firstletter
t
Run Code Online (Sandbox Code Playgroud)

要么:

echo $firstletter
T
Run Code Online (Sandbox Code Playgroud)

Kar*_*ath 239

word="tiger"
firstletter=${word:0:1}
Run Code Online (Sandbox Code Playgroud)

  • 正是我在寻找什么.单线,不产生子壳.我的投票! (6认同)

Ada*_*iss 67

word=something
first=${word::1}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢亚当,我不好,我之前不知道为什么它对我不起作用,但是现在在我尝试过的多个bash版本上,它都可以正常工作,回到GNU bash v3.1.0。仍然无法在zsh中使用,但是该问题被标记为“ bash”,因此无关紧要。 (2认同)

thi*_*ton 24

initial="$(echo $word | head -c 1)"
Run Code Online (Sandbox Code Playgroud)

每次在问题描述中说"第一"时,head都是可能的解决方案.

  • 由于上述评论所指出的原因,这不应该是公认的答案.真正的答案在下面 - "$ {word:0:1}"或"$ {word :: 1}". (23认同)
  • 请注意,POSIX头中没有`-c`选项:<http://www.unix.com/man-page/posix/1/head>. (8认同)
  • 这确实返回了第一个字母,但这是一个过度杀伤,解决方案依赖于外部工具(头部).这可以在纯壳中完成,它更干净. (8认同)

Mat*_*ski 12

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

$ word='tiger'
$ echo "${word%"${word#?}"}"
t
Run Code Online (Sandbox Code Playgroud)


小智 6

带切:

word='tiger'
echo "${word}" | cut -c 1
Run Code Online (Sandbox Code Playgroud)