技术干货

double dash in bash shell

2017-06-17  本文已影响0人  iamkai

開場

今天在活動裡看到一個問題, 如何刪除名為-q的資料夾, 當別人創建出奇怪的資料夾名稱, 你又沒有GUI使用右鍵->刪除的時候, double dash(--)就是一個好用的東西了.

Create -q folder

那我們先創建一個名為-q的資料夾:

$ mkdir -q
usage: mkdir [-pv] [-m mode] directory ...

這時候你就會shell會把-q認為是mkdir的一個option, 並認為使用mkdir的方法有誤.

這時--就派上用場了

$ mkdir -- -q

加個-- 就能順利的將-q資料夾創建出來, 像是什麼黑魔法, 其實--就只是告訴shelloption讀到這裡為止, 如果不懂請繼續往下看.

所以如果我想用mkdir-v方法創建資料夾原本的方式這樣:

$ mkdir -v dir
mkdir: created directory 'dir'

所以我想用-v方式創建名為-q的資料夾如下:

$ mkdir -v -- -q
mkdir: created directory '-q'

如我剛剛所說shel對於loption只會讀到--為止 , 所以-voption, -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

  1. 如何創建及刪除名為-q的檔案:
# create file
$ touch -- -q
# delete file
$ rm -- -q
  1. 如何創建及刪除名為--的檔案:
# create file
$ touch -- --
# delete file
$ rm -- --
  1. 如何用從test檔案裡使用grep抓出-v的字串:
$ grep -- -v test

Reference

  1. Denny's Bash Intro Slide
  2. What does “--” (double-dash) mean? (also known as “bare double dash”)
上一篇下一篇

猜你喜欢

热点阅读