read -p "Enter yes/no " SOMEVAR
SOMEVAR=`"echo ${SOMEVAR,,}"`
上記のコードは私に${SOMEVAR,,}: bad substitution
エラーを与えます。
答え1
${variable,,}
パラメータ拡張は、すべての文字が小文字のシェルの値に拡張されます。このコードを実行すると「誤った置換」エラーが発生することを考慮すると、実際には$variable
bash
- そのシェルを使用しませんが、可能です
/bin/sh
(常にそうではありませんbash
)。しかし、エラーが発生しないということは、read -p
エラーが発生する可能性が高いことを意味します。 bash
bash
この拡張をサポートしていない以前のバージョン(バージョン4に導入されています)を使用してください。
拡張の一般的な形式は、${variable,,pattern}
一致するすべての文字を小文字に変換することです(大文字に変換するため)。$variable
pattern
^^
$ str="HELLO"
$ printf '%s\n' "${str,,[HEO]}"
heLLo
bash
システムのマニュアルも参照してください。
以前のバージョンでは、bash
次のようにして変数値を小文字にすることができます。
variable=$( tr 'A-Z' 'a-z' <<<"$variable" )
tr
これは、「here-string」を使用して変数値を渡すことによって行われます。このユーティリティーは、tr
to ASCII 範囲 (C/POSIX ロケール仮定) のすべての文字を to 範囲内の対応する文字に変換します。A
Z
a
z
また参考にしてください
SOMEVAR=`"echo ${SOMEVAR,,}"`
次のように書く方が良いです。
SOMEVAR=${SOMEVAR,,}
実際、スペース(ユーザー入力が行く場所)を含む名前bash
のコマンドがないと、バージョン4+で作成した内容に「コマンドが見つかりません」というエラーが発生します。これは、二重引用符で囲まれた文字列を実行したいコマンドの置き換えによるものです。echo string
string