我想用bash将字符串中的第一个字符大写.
foo="bar";
//uppercase first character
echo $foo;
Run Code Online (Sandbox Code Playgroud)
应打印"Bar";
Ste*_*eve 279
使用bash(版本4+)的一种方法:
foo=bar
echo "${foo^}"
Run Code Online (Sandbox Code Playgroud)
打印:
Bar
Run Code Online (Sandbox Code Playgroud)
Mic*_*man 128
foo="$(tr '[:lower:]' '[:upper:]' <<< ${foo:0:1})${foo:1}"
Run Code Online (Sandbox Code Playgroud)
Ste*_*eve 27
一种方式sed:
echo "$(echo "$foo" | sed 's/.*/\u&/')"
Run Code Online (Sandbox Code Playgroud)
打印:
Bar
Run Code Online (Sandbox Code Playgroud)
Maj*_*ssi 21
$ foo="bar";
$ foo=`echo ${foo:0:1} | tr '[a-z]' '[A-Z]'`${foo:1}
$ echo $foo
Bar
Run Code Online (Sandbox Code Playgroud)
Fre*_*man 14
只是为了好玩,你在这里:
foo="bar";
echo $foo | awk '{$1=toupper(substr($1,0,1))substr($1,2)}1'
# or
echo ${foo^}
# or
echo $foo | head -c 1 | tr [a-z] [A-Z]; echo $foo | tail -c +2
# or
echo ${foo:1} | sed -e 's/^./\B&/'
Run Code Online (Sandbox Code Playgroud)
小智 13
这是"原生"文本工具的方式:
#!/bin/bash
string="abcd"
first=`echo $string|cut -c1|tr [a-z] [A-Z]`
second=`echo $string|cut -c2-`
echo $first$second
Run Code Online (Sandbox Code Playgroud)
And*_*rey 13
仅将第一个单词大写:
foo='one two three'
foo="${foo^}"
echo $foo
Run Code Online (Sandbox Code Playgroud)
一二三
将变量中的每个单词大写:
foo="one two three"
foo=( $foo ) # without quotes
foo="${foo[@]^}"
echo $foo
Run Code Online (Sandbox Code Playgroud)
Ø NE牛逼WO牛逼重稀土
(适用于 bash 4+)
仅使用awk
foo="uNcapItalizedstrIng"
echo $foo | awk '{print toupper(substr($0,0,1))tolower(substr($0,2))}'
Run Code Online (Sandbox Code Playgroud)
小智 7
这也有效...
FooBar=baz
echo ${FooBar^^${FooBar:0:1}}
=> Baz
Run Code Online (Sandbox Code Playgroud)
FooBar=baz
echo ${FooBar^^${FooBar:1:1}}
=> bAz
Run Code Online (Sandbox Code Playgroud)
FooBar=baz
echo ${FooBar^^${FooBar:2:2}}
=> baZ
Run Code Online (Sandbox Code Playgroud)
等等。
资料来源:
介绍/教程:
它也可以使用 bash-3.2 在纯 bash 中完成:
# First, get the first character.
fl=${foo:0:1}
# Safety check: it must be a letter :).
if [[ ${fl} == [a-z] ]]; then
# Now, obtain its octal value using printf (builtin).
ord=$(printf '%o' "'${fl}")
# Fun fact: [a-z] maps onto 0141..0172. [A-Z] is 0101..0132.
# We can use decimal '- 40' to get the expected result!
ord=$(( ord - 40 ))
# Finally, map the new value back to a character.
fl=$(printf '%b' '\'${ord})
fi
echo "${fl}${foo:1}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89016 次 |
| 最近记录: |