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