Shell 引用機(jī)制

2021-08-31 09:46 更新

元字符:

UNIX Shell提供各種元字符有特殊的意義,同時(shí)利用他們?cè)谌魏蜸hell腳本,并導(dǎo)致終止一個(gè)字,除非引用。

舉個(gè)例子: ?匹配一個(gè)單一的系統(tǒng)字符,而列出文件中的目錄和*匹配多個(gè)字符。下面是一個(gè)清單shell特殊字符(也稱為元字符):

* ? [ ] ' "  $ ; & ( ) | ^ < > new-line space tab

它與前可能被引用的字符(例如,放置自身) .

例子:

下面的例子,顯示了如何打印  a * 或 a ?:

#!/bin/sh

echo Hello; Word

這將產(chǎn)生下面的結(jié)果。

Hello
./test.sh: line 2: Word: command not found

shell returned 127

現(xiàn)在,讓我們嘗試使用帶引號(hào)的字符:

#!/bin/sh

echo Hello; Word

這將產(chǎn)生以下結(jié)果:

Hello; Word

$符號(hào)是一個(gè)元字符,所以它必須被引用,以避免特殊處理:

#!/bin/sh

echo "I have $1200"

這將產(chǎn)生以下結(jié)果:

I have $1200

是以下四種形式引用:

引用 描述
Single quote All special characters between these quotes lose their special meaning.
Double quote Most special characters between these quotes lose their special meaning with these exceptions:
  • $
  • `
  • $
  • '
  • "
Backslash Any character immediately following the backslash loses its special meaning.
Back Quote Anything in between back quotes would be treated as a command and would be executed.

單引號(hào):

考慮echo命令,其中包含許多特殊的shell字符:

echo <-$1500.**>; (update?) [y|n]

將在每個(gè)特殊字符前的反斜杠是繁瑣的,使該行難以閱讀:

echo <-$1500.**>; (update?) [y|n]

有一個(gè)簡(jiǎn)單的方法來(lái)引用一大組字符。將一個(gè)單引號(hào)(')的開(kāi)頭和結(jié)尾的字符串:

echo '<-$1500.**>; (update?) [y|n]'

單引號(hào)內(nèi)的任何字符均以一個(gè)反斜杠,就好像是在前面的每個(gè)字符。所以,現(xiàn)在這個(gè)echo命令將顯示正確。

如果要輸出一個(gè)字符串內(nèi)出現(xiàn)一個(gè)單引號(hào),你不應(yīng)該把單引號(hào)內(nèi)的整個(gè)字符串,而不是對(duì)子進(jìn)行使用反斜杠()如下:

echo 'It's Shell Programming'

雙引號(hào):

嘗試執(zhí)行以下shell腳本。這個(gè)shell腳本使用單引號(hào):


VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'

這將產(chǎn)生以下輸出結(jié)果:

$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]

所以這不是你想顯示什么。很明顯,單引號(hào)防止變量替換。如果想替換的變量值和倒置逗號(hào)如預(yù)期那樣運(yùn)作,那么就需要在雙引號(hào)命令如下:

VAR=ZARA
echo "$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]"

這將產(chǎn)生以下結(jié)果:

ZARA owes <-$1500.**>; [ as of (07/02) ]

雙引號(hào)帶走下列以外的所有字符的特殊含義:

  • $ 參數(shù)替代。
  • 用于命令替換的反引號(hào)。
  • $ 使字面美元標(biāo)志。
  • ` 使文字反引號(hào)。
  • " 啟用嵌入式雙引號(hào)。
  • 啟用嵌入式反斜杠。
  • 所有其他字符是文字(而不是指定)。

單引號(hào)內(nèi)的任何字符均以一個(gè)反斜杠,就好像是在前面的每個(gè)字符。所以,現(xiàn)在這個(gè)echo命令將顯示正確。

如果要輸出一個(gè)字符串內(nèi)出現(xiàn)一個(gè)單引號(hào),不應(yīng)該把單引號(hào)內(nèi)的整個(gè)字符串,而不是對(duì)子進(jìn)行使用反斜杠()如下:

echo 'It's Shell Programming'

反引號(hào):

把反引號(hào)之間的任何shell命令將執(zhí)行命令

語(yǔ)法

下面是一個(gè)簡(jiǎn)單的語(yǔ)法,把反引號(hào)之間的任何Shell命令:

例子:

var=`command`

例子:

繼執(zhí)行date命令,產(chǎn)生的結(jié)果將被存儲(chǔ)在 DATA 變量。

DATE=`date`

echo "Current Date: $DATE"

這將產(chǎn)生以下輸出結(jié)果:

Current Date: Thu Jul  2 05:28:45 MST 2009

 




以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)