シェルスクリプトからこれを得て、Solaris環境で完全に動作します。
grep -h '??.*??' $1/{CT,{MYDIR{85,97}}{,_E}}/R*txt
しかし、Ubuntuでシェルスクリプトを実行しようとすると、次のエラーが発生します。
grep: ./{MYDIR85}/R*txt: No such file or directory
grep: ./{MYDIR85}_E/R*txt: No such file or directory
少し編集した後はうまくいき、MYDIRの中かっこを削除しました。
grep -h '??.*??' $1/{CT,MYDIR{85,97} {,_E}} /R*txt
問題がどこにあるのか知りたいです。 linuxコマンドとSolarisコマンドは互換性がありませんか?
注 – MYDIR85、MYDIR97、CT の 3 つのディレクトリがあります。 Ubuntuでは、シェルは/ bin / bashです。 - Solarisではシェルの種類がわかりませんが、シェルスクリプトの最初の行は#!/bin/bashです。
答え1
bash
マニュアルページによると
適切に設定された中かっこ拡張には、引用符のない開閉括弧を含める必要があります。引用符のない1つ以上のカンマまたは有効なシーケンス表現。誤って形成された中括弧の拡張は変更されません。
あなたの表現に{MYDIR{85,97}}
、外の中括弧には引用符がないカンマやシーケンス式がないため、拡張されません{MYDIR85} {MYDIR97}
。たとえば、説明のために末尾のコンマを追加すると、目的の動作が得られます。
bash $ echo {MYDIR{85,97},}
MYDIR85 MYDIR97
これにより、_E
複合式に追加(おそらく不要な)要素が導入されます{CT,{MYDIR{85,97}}{,_E}}
。
Solarisでなぜ他の動作が現れるのかわかりませんが、注目すべき点はcsh
するこの場合、外部中括弧を削除します(もちろん末尾のカンマ形式も許可しますが、ksh
当然ですzsh
)。
csh % echo {MYDIR{85,97}}
MYDIR85 MYDIR97
csh % echo {MYDIR{85,97},}
MYDIR85 MYDIR97