我有一个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变量扩展来做到这一点,但无法完成:(
)
-c
POSIX头中没有任何选项:< unix.com/man-page/posix/1/head >。