我有一个Bash变量,$word
,有时候是一个单词或句子,例如:
word="tiger"
或者:
word="This is a sentence."
如何创建一个新的Bash变量,该变量仅等于在原变量中找到的第一个字母?例如,上述内容将是:
echo $firstletter
t
或者:
echo $firstletter
T
我有一个Bash变量,$word
,有时候是一个单词或句子,例如:
word="tiger"
或者:
word="This is a sentence."
echo $firstletter
t
或者:
echo $firstletter
T
word="tiger"
firstletter=${word:0:1}
word=something
first=${word::1}
first
被设置为字母s
。您可以通过echo $s
查看它。如果这对您不起作用,并且您需要帮助调试,请复制并粘贴您输入的命令及其输出。 - Adam Liss${word:0:1}
函数工作。 - luatorinitial="$(echo $word | head -c 1)"
每次在问题描述中提到“第一个”,head
很可能是解决方案。${word:0:1}
或 ${word::1}
。 - noamtmecho "$word" | fold -w1 | head -n 1
、printf '%.1s' "$X"
或printf '%c' "$X"
。但是这些命令都可能受到单字节和多字节字符的影响。 - phicr一种可以移植的方法是使用参数扩展(这是POSIX特性):(链接)
$ word='tiger'
$ echo "${word%"${word#?}"}"
t
::
的答案,但我不能错过这样一个扩展的滥用而不点赞。干得好。 - akostadinovsh
而不是 bash
的脚本环境中,您需要进行外壳调用(shell out)(尽管这不是问题的一部分)。 - usretc裁剪后:
word='tiger'
echo "${word}" | cut -c 1
既然您在这里使用了sed
标签,这里给出一个sed
的答案:
echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }"
以下是针对喜欢打字的人(我就是!)的详细步骤:
{
s
: 开始一个替换例程
/
: 开始指定要替换的内容^\(.\)
: 捕获第一个字符到第一组.*
: 确保剩余的行将被替换/
: 开始指定替换内容\1
: 插入第一组/
: 其余部分被丢弃;
q
: 退出 sed
,这样如果还有其他行,它就不会重复执行此块。好玩吧!:)
如果您在使用 bash
,您也可以使用 grep
等工具,但是在我看来,${x:0:1}
的魔法仍然是更好的解决方案。 (我花了大约一个小时尝试使用 POSIX 变量扩展来做到这一点,但是没成功 :(
)
x="test"
read -N 1 var <<< "${x}"
echo "${var}"