1

シェルスクリプトの先頭または末尾を作成しようとしています。誰かがこの行を説明してもらえますか?

$FILEDIR は、ファイルを含むディレクトリです。F は、このコマンドから返されるファイルの配列内のマーカーです: files=$( find $FILEDIR -type f | grep -v .rpmsave\$ | grep -v .swp\$ )

紛らわしい行は for ループ内にあります。

for f in $files; do
target=${f:${#FILEDIR}}
<<do some more stuff>>
done

シェル スクリプトの for ループでコロンとハッシュを見たことはありません。それらに関するドキュメントを見つけることができませんでした...誰かが私を教えてくれますか? 私はそれを感謝します。

4

2 に答える 2

2

ここには配列は含まれていません。POSIX sh には配列がありません (タグに基づく別のシェルを使用していないと仮定します)。

コロンは、Bash/Ksh部分文字列展開を示します。これらも POSIX ではありません。プレフィックスは、パラメーター内の#文字数に展開されます。ディレクトリ部分を切り取って に割り当てるつもりだったと思いtargetます。

残りの部分を説明すると、最初にfindが実行され、面白いことに 2 つの grep にパイプされます。これは、find だけで実行できたことを実行し (改行を含む可能性のあるファイル名で中断することを除く)、出力を に保存しfilesます。これは、POSIX ツールのみに制限されている場合、実際には正しく実行できないことでもありますが、より良い方法があります。

次に、ループが無意味な結果を反復するために、引用符filesなしで展開され、よりばかげた方法でシェルによって変更されます。スクリプトの残りの部分がこれほど悪い場合は、おそらくそれを破棄して最初からやり直してください。期待通りのことをする方法はありません。 for

于 2012-07-12T17:49:17.760 に答える
1

コロンは部分文字列として使用できます。そう:

A=abcdefg
echo ${A:4}

出力を印刷します:

efg

なぜ彼らがファイルディレクトリを2番目のパラメータとして使用するのかはわかりません...

for ループ セクションの理解に問題がある場合は、http://www.dreamsyssoft.com/unix-shell-scripting/loop-tutorial.phpを試してください。

于 2012-07-12T17:40:52.453 に答える