Bashは私のtrステートメントを変更しています

Bashは私のtrステートメントを変更しています

トレースオプション-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:]、括弧を見てください。ため![ ... ]:lowerr

rファイルがない場合、bashはワイルドカード文字を拡張できず、拡張しません[...]

おすすめ記事