Bash 脚本命令行参数为大写

use*_*541 7 bash shell-script

如果我可以在我的 bash shell 中做到这一点:

$ STRING="A String"
$ echo ${STRING^^}
A STRING
Run Code Online (Sandbox Code Playgroud)

如何将命令行参数更改为大写?

我试过:

GUARD=${1^^}
Run Code Online (Sandbox Code Playgroud)

该行产生该行的错误替换错误。

Joh*_*024 8

让我们从这个测试脚本开始:

$ cat script.sh 
GUARD=${1^^}
echo $GUARD
Run Code Online (Sandbox Code Playgroud)

这有效:

$ bash script.sh abc
ABC
Run Code Online (Sandbox Code Playgroud)

这不起作用:

$ sh script.sh abc
script.sh: 1: script.sh: Bad substitution
Run Code Online (Sandbox Code Playgroud)

这是因为,在我的系统,最喜欢的debian-like系统,默认的shell,/bin/sh不是bash的。要获得 bash 功能,需要显式调用 bash。

类似 debian 的系统上的默认 shell 是dash. 选择它不是因为功能,而是因为速度。它不支持^^. 要查看它支持什么,请阅读man dash.

  • ……您可以通过将脚本放在“she-bang”(脚本的第一行)中来“显式调用 bash”(即指定脚本应由 bash 运行)。`#!/bin/bash` 可以在很多系统上工作,`#!/usr/bin/bash` 可以在其他系统上工作,`#!/usr/bin/env bash` 应该可以在所有有 bash 的系统上工作(如果它在您的搜索路径中)。请参阅 [shebang 是否确定运行脚本的 shell?](http://unix.stackexchange.com/q/87560/23408) 和 [为什么最好使用“#!/usr/bin/env NAME”而不是“#!/path/to/NAME”作为我的shebang?](http://unix.stackexchange.com/q/29608/23408) (4认同)

Man*_*nde 5

使用tr命令:

脚本:

#!/bin/bash

echo $@ | tr '[a-z]' '[A-Z]'
Run Code Online (Sandbox Code Playgroud)

查看:

$ bash myscript.sh abc 123 abc
ABC 123 ABC
Run Code Online (Sandbox Code Playgroud)