トレースオプション-vと-xを使用してbash(4.1.2)スクリプトを実行する
for Option in "$@"; do
OptName=$(echo $Option | tr [:lower:] [:upper:])
明らかにする
+ for Option in '"$@"'
echo $Option | tr [:lower:] [:upper:]
++ echo -debug
++ tr '[:lower:]' '[:upper:]'
+ OptName=-DEBUG
これがまさに私が期待したものです。ただし、同じホストで同じbashバージョンを実行している他のユーザーは、
+ for Option in '"$@"'
echo $Option | tr [:lower:] [:upper:]
++ echo -debug
++ tr r r
+ OptName=-debug
翻訳コマンドが「tr rr」に変更されました。これまではユーザーが一人だけなので、環境にいるものでなければなりません(そうでしょ?)。
この問題の原因に関する提案はありますか?
ベストアンサー1
r
[:upper:]
拡張子がr
。
努力する
tr '[:lower:]' '[:upper:]'
(編集)私のテスト
%_ ls
%_ echo [:upper:]
[:upper:]
%_ touch r
%_ echo [:upper:]
r
%_
bashは複数のステップでコマンドラインを解析します。その一つは、ファイル名拡張とも呼ばれる「globbing」です。だからbashがそれを見たときにtrバイナリを見つけてtr [:lower:] [:upper:]
、括弧を見てください。ため![ ... ]
:
l
o
w
e
r
r
rファイルがない場合、bashはワイルドカード文字を拡張できず、拡張しません[...]
。