コマンドラインパラメータを大文字にする方法は?

コマンドラインパラメータを大文字にする方法は?

SOを検索した結果、次の文字列を大文字として使用することが機能することがわかりました。

str="Some string"
echo ${str^^}

しかし、コマンドライン引数で同様の操作を試みましたが、次のエラーが発生しました。

試験を終えた

#!/bin/bash
             ## Output
echo ${1^^}  ## line 3: ${1^^}: bad substitution
echo {$1^^}  ## No error, but output was still smaller case i.e. no effect

どうすればいいですか?

答え1

試す構文は、str^^Bash 4.0以降で使用できます。バージョンが古い可能性があります(または明示的にスクリプトを実行しましたsh)。

この試み:

str="Some string"
printf '%s\n' "$str" | awk '{ print toupper($0) }'

答え2

echo "lowercase" | tr a-z A-Z

出力:

LOWERCASE

答え3

それがあなたが使うすべてでtrはない場合は注意してください。A-Z他のロケールでは失敗し、sとbash(v4+)のみが'[:lower:]' '[:upper:]'機能します。awktoupper

$ str="abcåäö"

$ echo "$str" | tr '/a-z/' '/A-Z/'
ABCåäö

$ echo "$str" | LC_ALL=sv_SE tr '[:lower:]' '[:upper:]'
ABCåäö

$ echo "$str" | awk '{print toupper($0)}'
ABCÅÄÖ

$ echo ${str^^} # Bash 4.0 and later
ABCÅÄÖ

$ STR="ABCÅÄÖ"
$ echo ${STR,,}
abcåäö

答え4

文字列を引用してください。

echo "${str^^}"

関連情報