bash
このコードはシェル用であることを知っています。
for f in $file.docked.[0-9][0-9][0-9]
do
mv $f $f.pdb
done
このコードはtcsh
シェル用です。
foreach f ( file.docked.[0-9][0-9][0-9] )
mv $f $f.pdb
end
参考資料を読んでみるとこう理解できました。学習者として両方のコードをbash
。作成されたLinuxシェルの種類に関係なく、拡張機能を使用してすべてのシェルでコードを実行できるようにする方法はありますか?
答え1
for f in $file.docked.[0-9][0-9][0-9]
do
mv $f $f.pdb
done
csh
銀とBourneスイートのすべてのシェル(ash、bash、zsh、ksh、zsh、mksh、yash ...)tcsh
で構文的に有効なコードですが、役に立つzsh
作業を実行する可能性が最も高いです。
このコードの目的が、現在のディレクトリのファイル名にシェル変数の内容で始まり、3つのASCII 10進数で終わるサフィックスを追加することであれば、.pdb
次のものが必要です。$file
.docked.
bash
shopt -s failglob
for f in "$file".docked.[0123456789][0123456789][0123456789]
do
mv -- "$f" "$f.pdb"
done
(--
シェルに関係なく必要)bash
- Kornシェルと同様に、パラメータ拡張を引用する必要があります。それ以外の場合は分割+globを経ます。
[0-9]
通常、0123456789よりも多くの文字と一致し、そのリストはロケールとシステムによって異なります。 0123456789を[0123456789]
一致させるだけですbash
(いいえ、最新バージョンのオプションはglobasciiranges
役に立ちません)。- 一致しないと glob は拡張されないため、一致するファイルがない場合はループにインクルードを介して
$f
渡されます。 (cshまたはzshに似た動作を得るために)または(コピーされたオプションで)問題を解決します。contents-of-file-variable.docked.[0-9][0-9][0-9]
failglob
nullglob
zsh
foreach f ( file.docked.[0-9][0-9][0-9] )
mv $f $f.pdb
end
構文のように見えますが、再構文csh
ですzsh
。しなければなら(t)csh
ない:
foreach f ( file.docked.[0-9][0-9][0-9] )
mv -- $f:q $f:q.pdb
end
(この特別なケースでは、:q
他の例とは異なり、sは必ずしも必要ではありませんが、ファイル名にSPC、TAB、LF、またはワイルドカード文字が含まれないことが保証されます。)
まったく異なる言語で同じことを行う有効なコードを書くのは非常に面倒です。一般的に多言語コーディング。これCode Golf stackex 姉妹サイトには専用のセクションがあります。。しかし、これは一般的にやりたいことではありません。
バラよりこのウェブサイトの例これを達成するのに必要な長さの例である。