これは毎週の練習用で、採点や成績はありません(答えさえもらえません!)
週末にこの課題を終わらせようと思っているので、来週まで講師からのサポートは受けられないので、この課題の説明を手伝ってくれる人がいたら本当にありがたいです。私は 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
そうでなければ、ループを使用する理由がありません。