如何获取数字的第一位数字?例如,25 - 仅从 25 中获取“2”。
这是我尝试过的:
echo -n "Enter age: "
read age
echo $(s:0:1)
答案1
您使用了错误的变量s
,而不是age
参数扩展使用花括号${...}
:
read -p "Enter age: " age
echo "${age:0:1}"
答案2
最基本且 POSIX 兼容的方式(假设没有符号)是:
echo "${age%"${age#?}"}"
在某些 shell 中(bash、ksh、zsh):
echo "${age:0:1}"
如果该值可能包含符号,请先将其删除:
$ age=+23
$ age=${age#[+-]}
$ echo "${age%"${age#?}"}"
2
答案3
正如您bash
在标题中提到的:
#!/bin/bash
read -p 'Enter a number: '
printf '%.1s\n' "$REPLY"
这印刷仅字符串的第一个字符$REPLY
(由 读取read
)。
要将其存储在另一个变量中,othervar
请使用
printf -v othervar '%.1s' "$REPLY"
正如其他人提到的,您也可以只使用简单的变量替换,
printf '%s\n' "${REPLY:0:1}"
其中0
是字符串中我们要开始提取数据的从零开始的位置,1
是我们想要的子字符串的长度。
您可以${REPLY:0:1}
直接分配给另一个变量:
othervar=${REPLY:0:1}
答案4
POSIX 兼容解决方案:
#!/usr/bin/env sh
printf "Enter age: "
read -r age
echo "$age"
echo first digit: "$(echo "$age" | cut -c1)"
例子:
$ ./script.sh
Enter age: 25
25
first digit: 2