Linux與命令列基礎

$ ls
a.log  b.log  notes.txt
$ for f in *.log; do mv "$f" "${f%.log}.txt"; done

上面的操作之後,目錄中的檔案是下列何者?

  1. Aa.log.txt、b.log.txt、notes.txt
  2. B仍是 a.log、b.log、notes.txt,但 a.log 與 b.log 內容中的「.log」字串被取代為「.txt」
  3. Ca.txt、b.txt、notes.txt
查看答案與解析

正確答案:C. a.txt、b.txt、notes.txt

for f in *.log 會把符合 *.log 的 a.log 與 b.log 逐一放入變數 f,重複執行 do 與 done 之間的部分。${f%.log} 是從 f 的值的末尾去掉 .log 後的字串,a.log 就成為 a,mv "$f" "${f%.log}.txt" 會把 a.log 重新命名為 a.txt。notes.txt 不符合 *.log,所以維持原樣。把 "$f" 用雙引號括起來,是為了即使名稱含有空白,也能當作一個引數傳給 mv。

  • A. 這是寫成 mv "$f" "$f.txt" 時的結果。${f%.log} 會去掉末尾的 .log。
  • B. mv 是變更檔案名稱的指令,不會改變內容。取代內容要用 sed 等工具。
  • C. 正確。名稱變成去掉末尾的 .log 再加上 .txt。
練習這個領域 前往領域頁面

Linux與命令列基礎的其他題目

  1. 目前目錄中有附加執行權限的腳本 run.sh,輸入「run.sh」執行時出現「command not found」,輸入「./run.sh」則能執行。理由是下列何者?
  2. 依序執行上面的指令時,兩個 bash -c 的輸出組合是下列何者?
  3. Linux 的套件管理系統(Debian 系的 apt、Red Hat 系的 dnf 等)的主要功能是下列何者?
  4. 在使用 systemd 的 Linux 上,對服務 license.service 執行「systemctl start license.service」與「systemctl enable license.service」的差異是下列何者?
  5. 在 cron 中登錄了「30 2 * * 1 /home/alice/backup.sh」。backup.sh 執行的時間是下列何者?