スクリプトに次の小さなスニペットがあります。
scriptVars="ProjectEnvironment ProjectType Project SubProject sshUser"
for scriptVar in $scriptVars
do
# Transform all uppercase letters into lowercase
$scriptVar=${!scriptVar,,}
done
echo $ProjectEnvironment
変数に小文字のみを強制しようとしています。残念ながら、これを実行することはできません-コマンドではないというエラーが発生します。私の推測では、ループ内にいるためであり、ループ内でのみローカル変数のように機能します。
それが機能するように設定する方法はありますか?
当然のことかもしれませんが、変数はユーザーによってプロンプトが表示されることに注意してください。
編集 3.11.12
@chepnerの回答を使用して、これを使用することになりました:
scriptVars="ProjectEnvironment ProjectType Project SubProject sshUser"
for scriptVar in $scriptVars
do
[[ -n `echo ${!scriptVar} | tr -d "[:lower:][:digit:]-"` ]] &&
declare "$scriptVar=${!scriptVar,,}"
done
echo $ProjectEnvironment
変数では英数字とダッシュのみが許可されます(以前の健全性チェックがあります)。したがって、変数に大文字が含まれている場合にのみ、変数が再宣言されます。