我想用bash将字符串中的第一个字符大写。

foo="bar";

//uppercase first character

echo $foo;

应打印“Bar”;


当前回答

这也可以……

FooBar=baz

echo ${FooBar^^${FooBar:0:1}}

=> Baz
FooBar=baz

echo ${FooBar^^${FooBar:1:1}}

=> bAz
FooBar=baz

echo ${FooBar^^${FooBar:2:2}}

=> baZ

等等。

来源:

Bash手动:Shell参数扩展 完整Bash指南:参数 Bash黑客的维基参数扩展

入门/教程:

Cyberciti.biz: 8。转换为大写到小写或反之亦然 Opensource.com: Bash中参数展开的介绍

其他回答

它也可以在纯bash中使用bash-3.2完成:

# 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}"

使用sed的一种方法:

echo "$(echo "$foo" | sed 's/.*/\u&/')"

打印:

Bar

这也可以……

FooBar=baz

echo ${FooBar^^${FooBar:0:1}}

=> Baz
FooBar=baz

echo ${FooBar^^${FooBar:1:1}}

=> bAz
FooBar=baz

echo ${FooBar^^${FooBar:2:2}}

=> baZ

等等。

来源:

Bash手动:Shell参数扩展 完整Bash指南:参数 Bash黑客的维基参数扩展

入门/教程:

Cyberciti.biz: 8。转换为大写到小写或反之亦然 Opensource.com: Bash中参数展开的介绍

Linux和OSX的另一种干净的解决方案,它也可以与bash变量一起使用

python -c "print(\"abc\".capitalize())"

返回美国广播公司

$ foo="bar";
$ foo=`echo ${foo:0:1} | tr  '[a-z]' '[A-Z]'`${foo:1}
$ echo $foo
Bar