![]() |
|
|
Googleのunix.com
|
|||||||
| シェルプログラミングとスクリプティング KSH 、 CSH 、 shに、 bashの、はPerl 、 PHPは、削除するsed 、 Awkの、他のシェルスクリプトやシェルスクリプト言語についての質問の投稿はこちら。 |
その他のUNIXおよびLinuxフォーラムトピックは参考にすること
|
||||
| スレッド | スレッドスターター | フォーラム | 返信 | 最後の投稿 |
| メール機能の問題 | jwholey | シェルプログラミングとスクリプティング | 4 | 2008年5月1日 12:21午後 |
| スクリプトのディレクトリを再帰的な問題のためにしてくださいヘルプ | robertmcol | シェルプログラミングとスクリプティング | 2 | 2008年4月27日 08:00午後 |
| 関数問題とCoreDump | ジプシー | シェルプログラミングとスクリプティング | 8 | 2008年2月19日 06:37午後 |
| 再帰関数 | bebop1111116 | 高レベルのプログラミング | 1 | 2006年10月30日 08:12午後 |
| PERLを関数の問題 | avadhani | シェルプログラミングとスクリプティング | 2 | 2005年6月15日 05:18午前 |
![]() |
|
|
LinkBack | スレッドツール | このスレッドを検索 | スレッドを評価 | 表示モード |
|
|
|
||||
|
問題を再帰的に機能
こんにちはすべて、
私はツリーのディレクトリ構造の単一のディレクトリにすべてのファイルを移動する必要があります。 Inorderファイルはディレクトリから、私はファイル名には、ディレクトリの名前を追加する必要がありますが知っている。これは私がこれを次のようにされている再帰的な関数を書いた --------------------------------------------- datamover ( ) ( CDの1ドル # OLD_DIR \u003d $ 2 私は* する [ - Dの$私] それから TMP_DIR \u003d $私 datamover $ TMP_DIR 私は$エコー その他の ミュージックビデオ$私.. / $ 1_ $私 [場合、 - fを$ 1 / ] それから エコーはまだいくつかのファイルが存在 その他の CDを.. rmdir $ 1 Fiの Fiの 完了した ) -------------------------------------------------- -------------- いつまで私としては、ディレクトリ構造上の同じ実行 DirA - > DirB - >震える- > fileN - > DirM - > fileO --- > DirC - > DirP - >ファイラ - > DirQ - >ファイル このプログラムの出力を提供している次のように DirA - > DirB - > DirL_fileN - > DirM_fileO --- > DirC - > DirP - >ファイラ - > DirQ - >ファイル とデバッグouptutは次のとおりです -------------------------------------------------- ---- +ディレクトリ名ですDirAエコー ディレクトリ名DirAです + MAIN_DIR \u003d DirA + DirA datamover + DirAのCD + ' [ ' - DのDirB ' ] ' + TMP_DIR \u003d DirB + DirB datamover + DirBのCD + ' [ ' - Dの震える' ] ' + TMP_DIR \u003d震える +震えるdatamover +震えるのCD + ' [ ' - DのfileN ' ] ' +ミュージックビデオfileN .. / DirL_fileN + ' [ ' - fを震える/ ' ] ' + CDの.. +震えるrmdir + fileNエコー fileN + ' [ ' - DのDirM ' ] ' + TMP_DIR \u003d DirM + DirM datamover + DirMのCD + ' [ ' - Dの' fileO ] ' +ミュージックビデオfileO .. / DirM_fileO + ' [ ' - fをDirM / ' ] ' + CDの.. + DirM rmdir + fileOエコー fileO + fileOエコー fileO + ' [ ' - DのDirC ' ] ' +ミュージックビデオDirC .. / DirA_DirC ミュージックビデオ:できない状態DirC ` ' :そのようなファイルまたはディレクトリ + ' [ ' - fをDirA / ' ] ' + CDの.. + DirA rmdir rmdir : ` DirA ' :そのようなファイルまたはディレクトリ -------------------------------------------------- ------------ 誰whtのコードの問題とはどのように修正するために、教えてもらえますか? 私はこのシナリオでは、出力されるよう必要 DirA - > DirB_DirL_fileN - > DirB_DirM_fileO - > DirC_DirP_fileR - > DirC_DirQ_fileS 事前に感謝 |
|
||||
|
引用:
元のスクリプトでは、これが故障した場合 私は* 声明 *この関数の開始時と評価されているファイルは、ディレクトリへのサブディレクトリから移動を予測するものではありません。 |
|
||||
|
zazzybobのソリューションは、エレガントでシンプルなソリューションです。 再帰関数の中では、 Kornシェルに対応して、そこには2つの点を考慮している。特に彼らがして、これをローカルにする機能を持つ関数の中で定義されている現在の作業ディレクトリを含むすべての変数は、グローバルです。 コード:
typeset FILENAME=/etc/hosts
Function ()
{
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
生産する は/ etc / hostsを / etc / resolv.confを / etc / resolv.confを しかしばがら、 コード:
typeset FILENAME=/etc/hosts
Function ()
{
typeset FILENAME
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
生産する は/ etc / hostsを / etc / resolv.confを は/ etc / hostsを 変数は、関数は、作業ディレクトリを含めて地域を作るための迅速かつ汚い方法シェルでは独自の機能を、カッコ内の括弧を置くことで、関数を実行することです。この関数は、ディレクトリを含め、その環境にされている独自の機能を呼び出すスクリプトの中で反映されていないが、環境の変更時に電話をかけての独自のコピーを入手します。 コード:
typeset FILENAME=/etc/hosts
Function ()
{ (
FILENAME=/resolv.conf
echo $FILENAME
) }
echo $FILENAME
Function
echo $FILENAME
生産する は/ etc / hostsを / etc / resolv.confを は/ etc / hostsを 編集hegemaroで最終; 2007年2月3日に 10:41午前.. |