開場(chǎng)
今天在活動(dòng)裡看到一個(gè)問題, 如何刪除名為-q的資料夾, 當(dāng)別人創(chuàng)建出奇怪的資料夾名稱, 你又沒有GUI使用右鍵->刪除的時(shí)候, double dash(--)就是一個(gè)好用的東西了.
Create -q folder
那我們先創(chuàng)建一個(gè)名為-q的資料夾:
$ mkdir -q
usage: mkdir [-pv] [-m mode] directory ...
這時(shí)候你就會(huì)shell會(huì)把-q認(rèn)為是mkdir的一個(gè)option, 並認(rèn)為使用mkdir的方法有誤.
這時(shí)--就派上用場(chǎng)了
$ mkdir -- -q
加個(gè)-- 就能順利的將-q資料夾創(chuàng)建出來, 像是什麼黑魔法, 其實(shí)--就只是告訴shell把option讀到這裡為止, 如果不懂請(qǐng)繼續(xù)往下看.
所以如果我想用mkdir的-v方法創(chuàng)建資料夾原本的方式這樣:
$ mkdir -v dir
mkdir: created directory 'dir'
所以我想用-v方式創(chuàng)建名為-q的資料夾如下:
$ mkdir -v -- -q
mkdir: created directory '-q'
如我剛剛所說shel對(duì)於loption只會(huì)讀到--為止 , 所以-v是option, -q則是資料夾名稱.
Delete -q folder
再來是刪除-q資料夾, 講到這裡, 如果前面你有懂這裡其實(shí)可以當(dāng)練習(xí).
首先講一般做法, 也是錯(cuò)的做法:
$ rm -rf -q
rm: illegal option -- q
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
正確做法:
$ rm -rf -- -q
option只會(huì)讀到--, 所以-rf必須要放在--之前, 不要讓shell把-q誤認(rèn)為option
Other practice
- 如何創(chuàng)建及刪除名為
-q的檔案:
# create file
$ touch -- -q
# delete file
$ rm -- -q
- 如何創(chuàng)建及刪除名為
--的檔案:
# create file
$ touch -- --
# delete file
$ rm -- --
- 如何用從
test檔案裡使用grep抓出-v的字串:
$ grep -- -v test