国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

shell中的單引號和雙引號理解

desdik / 3243人閱讀

摘要:后來仔細查看了資料才發現自己之前對單引號和雙引號的理解有一些問題,在此記錄一些現象和結果。這個比較好理解,接下來我們看下單引號和雙引號使用的一些栗子,加深一下我們的理解。

問題描述:

????最近在寫shell腳本的時候,涉及到一個使用shell腳本發送json數據的問題,就是發送的json數據雙引號不見了,導致數據格式不正確,收到了錯誤的響應。后來仔細查看了資料才發現自己之前對shell單引號和雙引號的理解有一些問題,在此記錄一些現象和結果。

問題解析:

????1.首先,我這邊使用的是bash腳本,放一下bash腳本的手冊地址;
????2.然后我們看一下官方的手冊里面是怎么介紹的:
????????2.1 單引號:

Single Quotes:
Enclosing characters in single quotes (‘"’) preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.

????????翻譯出來就是:用單引號(""")括起字符可以保留引號中每個字符的字面值。單引號之間可能不會出現單引號,即使前面有反斜杠也是如此。

我的理解是單引號中的值都是會直接輸出字符或這字符串的字面量,不會去解析各種變量或者其他的符號,而且必須是成對出現的。如果兩個單引號之間有單引號,或者兩個單引號之間有反斜桿的單引號都是不會結束的情況,必須等待新的單引號出現,讓它們成對了才會結束。(__這里的意思是bash的解釋器會對單引號去解析,只有成對的時候才會結束,否則會一直等待,所以呢單引號對號都是成對的使用,雖然我也不知道單個的單引號有什么用__)。
下面舉幾個栗子用來解釋一下剛才說的:




可以看到前兩張圖,輸入了三個單引號,或者兩個單引號之間是一個帶反斜桿的單引號。都會出現>的符號,意思是等待繼續的輸入。第三張圖輸入了單引號以后,出現了;號,表示結束了。說明解釋器對單引號都是要成對的去解析。
???? 2.2 雙引號:

Double Quotes
Enclosing characters in double quotes (‘"’) preserves the literal value of all characters within the quotes, with the exception of ‘$’, ‘`’, ‘’, and, when history expansion is enabled, ‘!’. When the shell is in POSIX mode (see Bash POSIX Mode), the ‘!’ has no special meaning within double quotes, even when history expansion is enabled. The characters ‘$’ and ‘`’ retain their special meaning within double quotes (see Shell Expansions). The backslash retains its special meaning only when followed by one of the following characters: ‘$’, ‘`’, ‘"’, ‘’, or newline. Within double quotes, backslashes that are followed by one of these characters are removed. Backslashes preceding characters without a special meaning are left unmodified. A double quote may be quoted within double quotes by preceding it with a backslash. If enabled, history expansion will be performed unless an ‘!’ appearing in double quotes is escaped using a backslash. The backslash preceding the ‘!’ is not removed.
The special parameters ‘*’ and ‘@’ have special meaning when in double quotes (see Shell Parameter Expansion).

大概意思是說:雙引號中的信息會保留字面量,但是同時會對$,`,,這些符號做出特殊的解析。就是雙引號中的變量和轉義,和函數操作可以被正常解析出來。這個比較好理解,接下來我們看下單引號和雙引號使用的一些栗子,加深一下我們的理解。

實例:

直接上圖:
輸出1,2,應該沒有什么問題都是輸出的字面量的字符串。
輸出3,4,就是展示了單引號和雙引號的區別,單引號繼續輸出了字符串,而雙引號輸出了變量a的值。
輸出5,6呢,其實就是我遇到的問題,腳本中需要使用到日期的變量,并且放入到json的數據中。
輸出5如果直接使用單引號,肯定行不通,因為不解析變量。
輸出6呢,雖然最外層使用了雙引號,內部可以解析變量,但是發現問題沒有,變量外面是沒有雙引號的,而json的數據格式是{"key":"value"}。也是不符合的,__原因在于shell解釋器分辨不出來雙引號是在第幾層,僅僅查到一堆雙引號就把它們結為夫妻(一對對的雙引號進行解析),所以輸出6的解析過程是""{"解析出"{,第二對雙引號":"解析出:,第三對雙引號"$start_date"解析出start_date的值,依次類推。得出了"{startDay:2019-03-31 00:00:00,endDay:2019-03-31 23:59:59}"__。
輸出7相當于就是正確的輸出了json格式的數據,原理也很簡單在輸出6已經解釋清楚。

總結:

1.__寫shell腳本的時候,如果不需要解析里面的內容,就使用單引號,反之,雙引號;__
2.__記住shell解析單引號和雙引號的規則,是就近原則,遇到一對單/雙引號,就會解析出其中的內容,而不是根據什么最外層,最內層這種層級關系去解析的,這點要記住。所以在輸入json或者其他的格式的數據的時候,混合使用單/雙引號的時候要注意使用的順序,否則得到的結果并不是你預想的那樣__

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/25096.html

相關文章

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<