linux 获取字符串的第一个字符SHELL

kgqe7b3p  于 2022-12-22  发布在  Linux
关注(0)|答案(5)|浏览(402)

我想把字符串的第一个字符放在首位,例如:
第一个月
我想得到"$"
我在谷歌上搜索了一下,找到了一些解决方案,但它只涉及bash,而不是Sh !

xkrw2x1b

xkrw2x1b1#

您可能需要对 * specific * 值进行转义,以防止它被解释为shell变量,但是,如果您无法访问漂亮的bash子字符串工具,您仍然可以使用如下代码:

name=paxdiablo
firstchar=`echo $name | cut -c1-1`

如果您 * 确实 * 有bash(它在大多数Linux发行版上都可用,即使您的登录shell不是bash,您也应该能够使用它运行脚本),那么这就容易得多:

firstchar=${name:0:1}

要转义值,使其不被shell解释,您需要用途:

./first \$foreignKey

下面的first脚本显示了如何获取它:

letter=`echo $1 | cut -c1-1`
echo ".$letter."
2nbm6dog

2nbm6dog2#

这应该可以在任何Posix兼容的shell上工作(包括sh)。printf不需要是内置的,但它经常是,所以这可能会保存一两个fork:

first_letter=$(printf %.1s "$1")

注意:(* 可能我应该在六年前写这个简短的答案时解释这一点。*)写%c而不是%.1s可能很诱人;除了参数"$1"为空的情况之外,生成完全相同的结果。printf %c ""实际上生成NUL字节,这在Posix shell中不是有效字符;不同的shell可能会对这种情况有不同的处理。2有些shell允许NUL作为扩展;其他的,比如bash,忽略NUL,但是生成一个错误消息告诉你它已经发生了,%.1s的精确语义是“在参数的开始处 * 最多 * 1个字符,这意味着如果参数是空字符串,first_letter保证被设置为空字符串,而不引发任何错误指示。

oewdyzsn

oewdyzsn3#

也许这是一个老问题。最近我遇到了同样的问题,根据POSIX shell关于子字符串处理的手册,这是我的解决方案,不涉及任何subshell/fork
第一个月

8hhllhi2

8hhllhi24#

用于壳体

echo "hello" | cut -b 1 # -b 1 extract the 1st byte
h

echo "hello" |grep -o "." | head -n 1
h

echo "hello" | awk -F "" '{print $1}'
h

你可以试试bash:

s='hello'; echo ${s:0:1}
h

相关问题