我有一个Bash变量,$word有时是一个单词或句子,例如:
word="tiger"
要么:
word="This is a sentence."
如何制作一个新的Bash变量,该变量仅等于该变量中找到的第一个字母?例如,上面是:
echo $firstletter
t
要么:
echo $firstletter
T
Answers:
initial="$(echo $word | head -c 1)"
每次在问题描述中说“第一”head都是一种可能的解决方案。
${word:0:1}或以下${word::1}。
                    echo "$word" | fold -w1 | head -n 1,   printf '%.1s' "$X"或printf '%c' "$X"但这些都是受单一诉多字节字符有心计。
                    head -c n,哎呀。  echo "fábio" | head -c 2给f� ,所以我猜这是另一个问题。
                    word=something
first=${word::1}
first设置为letter s。您可以通过看到它echo $s。如果这对您不起作用,并且您需要调试帮助,请复制并粘贴您键入的命令及其输出。
                    一种可移植的方法是使用参数扩展(这是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}magick仍是更好的解决方案海事组织。(我花了一个小时的时间尝试使用POSIX变量扩展来做到这一点,但无法完成:(  )
-cPOSIX头中没有任何选项:< unix.com/man-page/posix/1/head >。