SolarisとLinuxシェルのコマンドの違い

SolarisとLinuxシェルのコマンドの違い

シェルスクリプトからこれを得て、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

おすすめ記事