1. 程式人生 > >shell 多行註釋詳解

shell 多行註釋詳解

在我們寫 shell 指令碼的時候,特別在除錯的時候經常需要註釋多行命令,但在每一行前輸入 # ,顯得有些麻煩。

基於 shell 命令的靈活性,我們可以使用下面的方法:

方法一(這是比較穩妥的作法):可以採用 HERE DOCUMENT 特性,實現多行註釋,比如

<<'COMMENT'
...

COMMENT

舉例如下:

#!/bin/bash
echo "Say Something"
<<COMMENT
    your comment 1
    comment 2
    blah
COMMENT
echo "Do something else"

方法二 ,直接採用 : 這個命令的特殊作用,但這種做法有很多侷限性,而且會影響效能,下面會介紹它的原理及效能分析。

如下是最簡單的使用方法:

: '
COMMENT1
COMMENT2
'

: + 空格 + 單引號

解釋如下:

首先要知道 : 在 shell 中的特殊作用,它是內建的命令,先看一下它的幫助說明:

$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.

即,: 它也是一個命令,既然是命令就會可以給它傳引數,但因它會過濾掉這些引數,而單引號括起來的是普通的程式碼部分表示字串,所以我們剛好可將來用來代表註釋,表示在 : 後的 單引號括起來的部分在程式執行的時候忽略。

另外如果不好理解,直接把它當作彙編中的 NOP, python 中的 pass ,它只是一個佔位,每次返回都是真,即 $? 的話,結果會是 0

如此一來,此方法是不是很絕妙? 但事實上裡面潛藏著很多問題:

  1. 不會註釋 shell 指令碼中本身帶有單引號的語句部分,除非你將程式中的單引號全部換成又引號,這樣不爽。
  2. 還是就是,雖然 : 會忽視後面的引數,但其實引數部分還是可能會被執行些操作,比如替換操作,檔案擷取操作等。所以這樣會影響到程式碼的執行效率。
    例如:
    : > file
    會擷取 file 。
    : $(dangerous command) 這個替換操作照樣會執行。

所以第二種方法,只能臨時用用。

第三種方法,即:採用 : + << 'COMMENT' 的方式。

#!/bin/bash
echo "Say Something"
: <<'COMMENT'
    your comment 1
    comment 2
    blah
COMMENT
echo "Do something else"

注意:要加上單引號部分,有時候雖然不加不會有什麼問題,但還是要加,以防出現莫名其妙的意外發生,比如發生字元擴充套件,命令替換等。

但最保險的方法還是每行前加上 #

相關推薦

shell 註釋

在我們寫 shell 指令碼的時候,特別在除錯的時候經常需要註釋多行命令,但在每一行前輸入 # ,顯得有些麻煩。 基於 shell 命令的靈活性,我們可以使用下面的方法: 方法一(這是比較穩妥的作法):可以採用 HERE DOCUMENT 特性,實現多行註釋

Shell】單行註釋註釋

單行註釋 ‘# ‘ # echo "hello" 多行註釋 方法1 : << ! 這是註釋1 這是註釋2 這是註釋3 ! 方法2 :' 這是註釋1 這是

shell 中的單行註釋註釋

Original url: http://blog.csdn.net/lansesl2008/article/details/20558369 1. 單行註釋 眾所周知,#  比如想要註釋:echo “ni” # echo "ni" 2. 多行註釋: 法一: : &l

shell的單行註釋註釋

1、單行註釋 以#號開頭的行就是註釋,注意第一行除外(比較特殊) $ cat tets.sh #!/bin/bash #echo "I am renwoxing" #<==以#號

關於shell腳本里的單行註釋註釋方法

以“#”開頭的行就是註釋,會被直譯器忽略。 sh裡沒有多行註釋,只能每一行加一個#號。只能像這樣: #-------------------------------------------- # 這是一個自動打ipa的指令碼,基於webfrogs的ipa-build書寫:

shell指令碼——註釋(單行註釋 註釋

單行註釋以"#"開頭的行就是註釋,會被直譯器忽略。#--------------------------------------------# 這是一個註釋# author:菜鳥教程# site:www

Python單行註釋註釋

單行 全局 速度 無法 第三方 本質 特性 最小 利用 >>> print "hello,world"hello,world>>> 2+24#單行註釋 """每行代碼的後面可以加上分號,但是不會有任何作用,除非同一行還有更多的代碼,

Java 線程(三)------線程的同步

alt 來看 監聽 介紹 創建進程 java 多線程 system ima 關鍵字 Java 多線程詳解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多線程詳解(二)------如何創建進

Python的單行、註釋

cnblogs ima images ges 分享 mage logs 多行 bsp 單行用# 多行用3個單引號‘或者3個雙引號" Python的單行、多行註釋

Nginx+Php-fpm運原理

pop 圖片 ron 什麽 地址 pan webserver family tid 一、代理與反向代理 現實生活中的例子 1、正向代理:訪問google.com 如上圖,因為google被墻,我們需要vpnFQ才能訪問google.com。 vpn對於“我們”來說,是可

OC學習小結之ios運過程

for cat 用戶 with res nbsp c學習 launch cati 1)ios核心類 UIView 視圖,屏幕上能看得見的東西都是視圖,例如:按鈕、文本標簽、和表格等 UIViewController:內部默認有個視圖(UIView),負責管理UIView的

JavaSE7基礎 單行註釋// 與 註釋 /**/

png 深入 img 4.2 div static ring 版本 blog jdk版本 :jdk-7u72-windows-i586系統 :Windows7編輯器 :Notepad++ v7.4.2註意事項 :博文內容僅供參考,不可用於其他用途。 代碼

iOS 運

序列 get not oci protocol caption 聲明 實現 att 註:本篇文章轉自:http://www.jianshu.com/p/adf0d566c887 一、運行時簡介 Objective-C語言是一門動態語言,它將很多靜態語言在編譯和鏈接時期做的事

php multicast播實現

clas -s ria socket php文件 pan php set 廣播 什麽是多播? 網絡中存在3中傳播形式,單播,廣播,多播。 1. 單播 : 就是1->1 2. 廣播 : 1->多(廣播域內) 3. 多播 : 1->組(一組ip) 1

vim中如何設置註釋和刪除註釋

需要 visual 註釋符 註釋 命令行 多行 bsp nbsp 字母 多行註釋: 1. 進入命令行模式,按ctrl + v進入 visual block模式,然後按j, 或者k選中多行,把需要註釋的行標記起來 2. 按大寫字母I,再插入註釋符,例如# 3. 按esc鍵然後

eclipse註釋格式化代碼時自動添加的星號怎麽去掉?

都去 註釋格式 格式 style comment ble format com general 用eclipse的代碼格式化的時候,多行註釋的格式會被調亂,並且每行都添加一個星號在前,有沒有辦法設置這個多行註釋的格式化模版把這些個星號都去掉?Java->Code St

Python中的單行註釋符號

批量 輸出 12px pri 包含 padding auto p s mic 一、python單行註釋符號(#) 井號(#)常被用作單行註釋符號,在代碼中使用#時,它右邊的任何數據都會被忽略,當做是註釋。 print 1 #輸出1 #號右邊的內容在執行的時候是不會被輸出的。

tomcat運方式

java nio tomcat7 new 連接器 請求 nio max 網絡傳輸 block tomcat的運行模式有3種 一、bio(blocking I/O) 即阻塞式I/O操作,表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包)。是基於J

shell】Linux shell for 循環

linux shell編程 for循環 運維 for 循環格式 for i in 條件 do 內容 done 實例循環1到10並打印 #!/bin/bash - for i in `seq 10` do echo $i done 版權所有:arppinging

html中的版本檢測註釋

ext san eight CP play clas fff block html中 <!--[if !IE]><!--> 除IE外都可識別 <!--<![endif]--><!--[if IE]> 所有的IE可識別 &