這是我們每週的練習,沒有評分或等級(我們甚至沒有得到答案!)
如果有人有時間幫忙向我解釋這項練習,我將非常感激,因為我正試圖在周末完成這項工作,並且要到下週才能得到導師的幫助。我做了很多關於 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
這實在是太奇怪了。事實上,您確定括號不是大括號嗎?並且也應該有 a.
代替:
.
filed=${file%.$1}.$2
${var%pattern}
從變數末端剪切模式。man bash
詳細資訊請參閱參數擴充。因此,在這種情況下,它會刪除點加上第一個參數給出的擴展名,並添加一個點和第二個參數。
順便說一句,移動線可能應該是
mv $file $filed
否則就沒有理由使用循環。