美文网首页技术干货
double dash in bash shell

double dash in bash shell

作者: iamkai | 来源:发表于2017-06-17 00:50 被阅读0次

    開場

    今天在活動裡看到一個問題, 如何刪除名為-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”)

    相关文章

      网友评论

        本文标题:double dash in bash shell

        本文链接:https://www.haomeiwen.com/subject/bwhvqxtx.html