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

问题描述 投票:0回答:5

我想要字符串的第一个字符,例如:

$>./first $foreignKey

我想得到

"$"

我用谷歌搜索,找到了一些解决方案,但它只涉及 bash 而不是

Sh !

linux sh
5个回答
21
投票

这应该适用于任何 Posix 兼容 shell(包括

sh
)。
printf
不需要是内置的,但通常是内置的,所以这可能会节省一两个叉子:

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

注意:也许六年前我写这个简短答案时就应该解释这一点。)写

%c
而不是
%.1s
可能很诱人;除了参数
"$1"
为空的情况之外,它会产生完全相同的结果。
printf %c ""
实际上产生一个 NUL 字节,这在 Posix shell 中不是有效字符;不同的 shell 可能会以不同的方式处理这种情况。有些允许 NUL 作为扩展;有些则允许 NUL 作为扩展。其他的,比如 bash,会忽略 NUL,但会生成一条错误消息来告诉您它已经发生了。
%.1s
的精确语义是“参数开头最多有 1 个字符,这意味着如果参数是空字符串,则保证将 first_letter 设置为空字符串,而不会引发任何错误指示.
    


15
投票
special

值以防止它被解释为 shell 变量,但是,如果您无权访问漂亮的 bash 子字符串工具,您仍然可以使用类似以下内容:


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

如果您 
do

bash(它在大多数 Linux 发行版上都可用,即使您的登录 shell 不是

bash
,您也应该能够使用它运行脚本),那就容易多了:

firstchar=${name:0:1}

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

./first \$foreignKey

以下 
first

脚本展示了如何获取它:


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



8
投票

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



6
投票

a="some string here" printf 'first char is "%s"\n' "${a%"${a#?}"}"

    


0
投票
printf -v first_character "%c" "${variable}"

    

© www.soinside.com 2019 - 2024. All rights reserved.