2016-05-06 93 views
-1

在bash腳本中,我需要檢查字符串$HEADER是否以字符序列「/ *」開頭。我試圖:bash:檢查字符串是否以「/ *」開頭

if [ $(echo $HEADER | cut -c 1-2) = '/*' ] 

它沒有按預期工作。看來該字符串與根目錄的文件列表進行比較。

如何保護字符/和*以從shell中解釋?

用反斜槓保護字符也不起作用。

回答

1

問題是命令替換的結果受制於文件名稱生成。您需要引用,以及$HEADER在命令替換中的擴展。

if [ "$(echo "$HEADER" | cut -c 1-2)" = '/*' ] 

由於使用bash,使用[[命令(其可以執行圖案匹配)是一種出色的解決方案,雖然,as Jahid has already answered

if [[ $HEADER = '/*'* ]] 
2

這應該工作:

if [[ $HEADER = '/*'* ]] 

另一個解決方案是:

if [ "${HEADER:0:2}" = '/*' ] 

或者

if [[ "${HEADER:0:2}" = '/*' ]] 
0

這應該有助於

if [[ $(echo $HEADER | grep -E '^\/\*' | wc -l) -gt 0 ]] 
1

你已經有一些解決方案,但

[ "${HEADER#/\*}" != "${HEADER}" ] 

作品與POSIX shells無需使用外部工具(不包括[)或bash化。

有趣的是,這種方法從標記的副本中丟失。

相關問題