これは評価や成績のない週間練習です(答えも得られませんでした!)。
誰かが私にこの練習を説明する時間があれば、本当に感謝します。私は週末にこの練習を完了しようとしており、来週まで教師の助けを借りることができないからです。私はbashプログラミング、正規表現、およびgrepについてたくさんの本を読んで作業しました。しかし、以下のコードは私を混乱させます。
ガイドラインが不完全か理解できないのか疑問に思います。
具体的には、以下の内容により、内容全体を理解できません。
NAMES=`ls *.$1`
filed=$(file:$1).$2
演習 4.3
以下の内容を含むテキストファイル(myfile という)が与えられたとします。
#!/bin/bash
NAMES=`ls *.$1`
for file in $NAMES; do
filed=$(file%:$1).$2
mv file filed
done
次のコマンドを実行します。 $ grep ' file ' myfile
$ grep 'file*' myfile
$ grep '^ *file*' myfile
$ grep 'file$' myfile
$ sed 's/ file* / script /g' myfile
$ sed ' /for/,/files/d' myfile
$ sed '/\$[A-Z]..[A-Z]*/d' myfile
次に、出力または結果を解釈します。
ベストアンサー1
NAMES=`ls *.$1`
これは仕事です。変数に$NAMES
値が割り当てられます。値はバックティックでマークされたコマンドの出力として扱われます(コマンドの置換を参照man bash
)。$1
スクリプトの最初のパラメータに対応する特別なパラメータです。したがって、拡張子を引数(例./script.sh txt
:)として使用してスクリプトを実行する必要があり、ls
コマンドの出力が変数に格納されるようです。
filed=$(file%:$1).$2
本当に変です。実際、かっこが中かっこではないことは確実ですか?そして.
代わりににする必要があります:
。
filed=${file%.$1}.$2
${var%pattern}
変数の末尾からパターンを切り取ります。man bash
詳細については、パラメータ拡張を参照してください。したがって、この場合、点と最初の引数によって提供された拡張子を削除し、点と2番目の引数を追加します。
ところで、動くラインはおそらく
mv $file $filed
それ以外の場合、ループを使用する理由はありません。