Natural

           

          shell 注釋多行方法

          由于Shell不支持直接多行注釋,總結了以下Shell注釋多行的變通方法


          一、通過Here Documents和:實現
          1、最簡單方法
          :<<BLOCK
          注釋內容
          BLOCK
                把輸入重定義到前面的命令,但是:是空命令,所以就相當于注釋了。
                如果注釋中有反引號的命令就會報錯。反引號部分沒被注釋掉,例如ab=`ls -l abc`就不會被注釋掉。
          2、解決注釋中有反引號的問題
                在windows的cygwin環境中測試時報錯
          A、方法一
          :<<BLOCK'
          注釋內容
          'BLOCK
          B、方法二
          :<<BLOCK'
          注釋內容
          'BLOCK
          C、方法三
          :<<'
          注釋內容
          '
                以上三種方法都是通過在:<
                BLOCK為Here Documents中的定義符號可以隨意起名,只要前后匹配就行了
          3、簡單說說:指令和Here Documents
                :就是什么也不作(do nothing)即空命令。它的最基本作用就是在if,then條件中。在if語句中各部分必須接執行命令,但有時你不在乎條件是為真(或假)只在乎相反情況。
          command<<word
          any input
          file content
          word
                是Here Documents的用法,意思是將以上的定義符(word,也可以理解成本地文檔名)傳給某腳本或命令,word的內容為兩個word間輸入任意內容(word為Here Documents中的定義符號可以隨意起名,只要前后匹配就行了),這樣就可以在腳本中用command來執行輸入而不必再重建一文件。
            常用在菜單屏幕中,例如:
          cat <<Menu
            1. List files
            2.HELP
            3.exit
          Menu
           
          :<<word
          ....注釋內容
          word
                就類似于建一本地文件,然后對它執行空命令,也就是什么也不做,就相當于注釋了。
            更詳細的Here Document說明可參考http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/here-docs.html


          二、通過循環實現
          1、while和:實現
          while : 
          do 
          break
          注釋內容
          done
           
          2、until和:實現
          until :
          注釋內容
          done
          cygwin中測試時報錯,要按照如下格式
          until :
          do
          注釋內容
          done

          3、if和:實現
          if [ 1 -eq 2 ]
          then
          注釋內容
          fi
           
                注意注釋內容中是否含”done/fi”,包含會造成意外結束

          三、其它方法
          1、方法一
          : :||:<<\COMMENTS
          ....注釋內容
          COMMENTS
            高手說上面這種方法最好,因為Here Documents部分不會執行到,只會分析到,應該不會對第二個:作實際的IO重定向。
          2、方法二
          : << 'BLOCK'
          ....注釋內容
          BLOCK
            可以將里面的變量擴展關閉掉。
          3、方法三
          :||{
          ....注釋內容
          }
            這種方法不用到Here Documents,不過這種方法要注意注釋內容中的}
          4、方法四
          :<<\EOF
          ....注釋內容
          EOF
            上面方法可關掉Here Documents中的擴展功能,在Here-Document中忽略ending marker前的任何字符
            實際上使用<<\EOF <<'EOF',甚至<<<\eof在語法上面更加的簡潔。不過這種方法同樣要注意注釋內容中的eof< p=""> <<\eof在語法上面更加的簡潔。不過這種方法同樣要注意注釋內容中的eof<>

          四、參考資料
            http://bbs.chinaunix.net/viewthread.php?tid=1152658&extra=&page=1
            http://blog.csdn.net/magicpang/archive/2009/04/14/4072878.aspx
            http://bbs.chinaunix.net/viewthread.php?tid=1196678&extra=&page=1





          posted on 2012-03-09 17:36 此號已被刪 閱讀(2896) 評論(0)  編輯  收藏 所屬分類: Linux

          導航

          統計

          常用鏈接

          留言簿(8)

          隨筆分類(83)

          隨筆檔案(78)

          文章檔案(2)

          相冊

          收藏夾(7)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 合川市| 彭水| 边坝县| 平泉县| 胶州市| 萨迦县| 临武县| 西林县| 沙田区| 肇源县| 胶南市| 偏关县| 吉首市| 东辽县| 句容市| 冀州市| 天等县| 济宁市| 深泽县| 贺兰县| 宜城市| 乌拉特中旗| 兖州市| 潞西市| 瓦房店市| 金川县| 肇东市| 江阴市| 东兰县| 石河子市| 四子王旗| 含山县| 重庆市| 芒康县| 红原县| 临沂市| 浦东新区| 中宁县| 天门市| 博爱县| 东明县|