鍍金池/ 教程/ Linux/ Shell 引用機(jī)制
Shell 輸入/輸出重定向
Shell 循環(huán)類(lèi)型
Shell是什么?
Shell 特殊變量
Shell 算術(shù)運(yùn)算符示例
Shell 關(guān)系運(yùn)算符示例
Shell 替代
Shell 函數(shù)
Shell 條件語(yǔ)句
Shell 聯(lián)機(jī)幫助
Shell 數(shù)組/Arrays
Shell 布爾運(yùn)算符范例
Shell
Shell if...elif...fi 語(yǔ)句
Shell case...esac 語(yǔ)句
Shell 使用Shell變量
Shell 文件測(cè)試符例子
Shell 基本運(yùn)算符
Korn Shell 運(yùn)算符
Shell 字符串運(yùn)算范例
Shell while 循環(huán)
Shell 引用機(jī)制
Shell if...else...fi 語(yǔ)句
Shell select 循環(huán)
C Shell運(yùn)算符
Shell 循環(huán)控制break/continue
Shell for循環(huán)
Shell until 循環(huán)
Shell if...fi語(yǔ)句

Shell 引用機(jī)制

元字符:

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

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

* ? [ ] ' "  $ ; & ( ) | ^ < > 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