double dash in bash shell

開場(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í)--就只是告訴shelloption讀到這裡為止, 如果不懂請(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ì)讀到--為止 , 所以-voption, -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

  1. 如何創(chuàng)建及刪除名為-q的檔案:
# create file
$ touch -- -q
# delete file
$ rm -- -q
  1. 如何創(chuàng)建及刪除名為--的檔案:
# 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”)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容