Provided by:
manpages-zh_1.5-1_all 
NAME
bash - GNU Bourne-Again SHell (GNU å‘½ä»¤è§£é‡‹ç¨‹å¼ ã€ŒBourne二世ã€)
z(SYNOPSIS)
bash [options] [file]
(COPYRIGHT)
Bash is Copyright (C) 1989-2002 by the Free Software Foundation, Inc.
yz(DESCRIPTION)
Bash 是一蚖P sh
相容的命令解釋程å¼ï¼Œå¯ä»¥åŸ·è¡Œå¾žæ¨™æº–輸入或者檔案ä¸è®€å–的命令。 Bash
也整åˆäº† Korn å’Œ C Shell (ksh å’Œ csh) ä¸çš„優秀特性。
Bash 的目標是æˆç‚ºéµå¾ª IEEE POSIX Shell and Tools specification (IEEE
Working Group 1003.2,å¯ç§»æ¤ä½œæ¥ç³»çµ±è¦ç´„: shell 和工具) 的實ç¾ã€‚
(OPTIONS)
除了在 set 內建命令的文件ä¸è¬›z的單å—符é¸é … (option) 之外,bash
在啟動時還解釋下列é¸é …。
-c string 如果有 -c é¸é …,那麼命令將從 string ä¸è®€å–。如果 string 後-
æƒ˜é™¸æŠ (argument),它戔N用於給ä½ç½®åƒæ•¸ (positional parame-
ter,以 $0 起始) 賦C
-i 如果有 -i é¸é …,shell 將交互地執行 ( interactive )。
-l é¸é …使得 bash 以類似登入 shell (login shell) 的方å¼å•Ÿå‹•
(åƒè¦‹ä¸‹æ‚¸ (INVOCATION) ç« ç¯€)。
-r 如果有 -r é¸é …,shell æˆç‚ºå—çš„ ( restricted ) (åƒè¦‹ä¸‹æ‚¸ -
shell(RESTRICTED SHELL) ç« ç¯€)。
-s 如果有 -s
é¸é …,或者如果é¸é …處ç†å®Œä»¥å¾Œï¼Œæ²’æœ‰åƒæ•¸å‰©é¤˜ï¼Œé‚£éº¼å‘½ä»¤å°‡å¾žæ¨™æº–輸入讀å–。
é€™èš‡é¾ ç«£åƒ\在啟動一茈璊 shell 時å¯ä»¥è¨ç½®ä½ç½®åƒæ•¸ã€‚
-D 呿¨™æº–輸出列å°ä¸€èŒˆH $ 為å‰å°Žçš„,以雙引號引用的å—符串列表。
這是在當å‰èªžè¨€ç’°å¢ƒä¸æ˜¯ C 或 POSIX 時,稿本ä¸éœ€nç¿»è¯çš„å—符串。
é€™èš‡é¾ è’籈t了 -n é¸é …ï¼›ä¸æœƒåŸ·è¡Œå‘½ä»¤ã€‚
[-+]O [shopt_option]
shopt_option 是一 shopt å…§å»ºå‘½ä»¤å¯æŽ¥å—çš„é¸é … (åƒè¦‹ä¸‹æ‚¸
shell O(SHELL BUILTIN COMMANDS) ç« ç¯€)。 如果有
shopt_option,-O å°‡è¨ç½®é‚£èš‡é¾ ç”æ¼•F +O å–æ¶ˆå®ƒã€‚
如果沒有給出 shopt_option,shopt
將在標準輸出上列å°è¨ç‚ºå…許的é¸é …çš„å稱和C 如果啟動é¸é …是
+O,輸出將以一種å¯ä»¥å’±å³Žå€æ“—Jçš„æ ¼å¼é¡¯ç¤ºã€‚
-- -- 標誌é¸é …çš„çµæŸï¼Œç¦æ¢å…¶é¤˜çš„é¸é …處ç†ã€‚任何 --
ä¹‹å¾Œçš„åƒæ•¸å°‡ä½œç‚ºæª”åå’Œåƒæ•¸å°å¾…ã€‚åƒæ•¸ - 與æ¤ç‰åƒ¹ã€‚
Bash 也解釋一些多å—節的é¸é …。在命令行ä¸ï¼Œé€™äº›é¸é …å¿…é ˆç½®æ–¼éœ€-
n被è˜åˆ¥çš„å–®å—ç¬¦åƒæ•¸ä¹‹å‰ã€‚
--dump-po-strings
ç‰åƒ¹æ–¼ -D,但是輸出是 GNU gettext po (å¯ç§»æ¤å°è±¡) æª”æ¡ˆæ ¼å¼
--dump-strings
ç‰åƒ¹æ–¼ -D
--help 在標準輸出顯示用法信æ¯ä¸¦æˆåŠŸé€€å‡º
--init-file file
--rcfile file
如果 shell 是交互的,執行 file ä¸çš„å‘½ä»¤ï¼Œè€Œä¸æ˜¯æ¨™æº–çš„-
茪Håˆå§‹åŒ–檔案 ~/.bashrc (åƒè¦‹ä¸‹æ‚¸ (INVOCATION) ç« ç¯€)
--login
ç‰åƒ¹æ–¼ -l
--noediting
如果 shell 是交互的,ä¸ä½¿ç”¨ GNU readline 庫來讀命令行
--noprofile
ä¸è®€å–系統Såœçš„啟動檔案 /etc/profile 或者任何茪Håˆå§‹åŒ–檔案
~/.bash_profile, ~/.bash_login, 或 ~/.profile 。é è¨æƒ…æ³ä¸‹ï¼Œ
bash 在作為登入 shell 啟動時讀å–這些檔案 (åƒè¦‹ä¸‹æ‚¸ (INVOCA-
TION) ç« ç¯€)
--norc 如果 shell 是交互的,ä¸è®€å–/執行茪Håˆå§‹åŒ–檔案 ~/.bashrc 這-
èš‡é¾ ç–b shell 以 sh 命令啟動時是é è¨å•Ÿç”¨çš„
--posix
如果é è¨æ“作與 POSIX 1003.2 標準ä¸åŒçš„話,改變 bash
çš„è¡Œç‚ºä¾†ç¬¦åˆæ¨™æº– (posix mode)
--restricted
shell æˆç‚ºå—çš„ (åƒè¦‹ä¸‹æ‚¸ shell(RESTRICTED SHELL) ç« ç¯€)
--rpm-requires
產生一茯馬牮Z本é‹è¡Œï¼Œéœ€n的檔案的列表。 é€™èš‡é¾ ç‰]å«äº† -n é¸é …。
它是為了é¿å…é€²è¡Œç·¨è¯æœŸéŒ¯èª¤æª¢æ¸¬æ™‚的制ï¼ï¼ Backticks, [] tests,
還有 evals 䏿œƒè¢«è§£é‡‹ï¼Œä¸€äº›ä¾è³´é—œç³»å¯èƒ½ä¸Ÿå¤±
--verbose
ç‰åƒ¹æ–¼ -v
--version
åœ¨æ¨™æº–è¼¸å‡ºé¡¯ç¤ºæ¤ bash 的版本信æ¯ä¸¦æˆåŠŸé€€å‡ºã€‚
(ARGUMENTS)
如果é¸é …處ç†ä¹‹å¾Œä»æœ‰åƒæ•¸å‰©é¤˜ï¼Œä¸¦ä¸”沒有指定 -c 或 -s é¸é …,第一-
èŒæŠï›Nå‡å®šç‚ºä¸€èŒˆ]å« shell 命令的檔案的åå—。 如果 bash
是以這種方å¼å•Ÿå‹•的, $0 å°‡è¨ç½®ç‚ºé€™-
蚗仵蛌漲Wå—,ä½ç½®åƒæ•¸å°‡è¨ç½®ç‚ºå‰©é¤˜çš„å…¶ä»–åƒæ•¸ã€‚ Bash 從這-
蚗仵蚺勿爸並執行命令,然後退出。 Bash 的退出狀態是稿本ä¸åŸ·è¡Œçš„æœ€å¾Œä¸€-
茤R令的退出狀態。 如果沒有執行命令,退出狀態是0。
嘗試的æ¥é©Ÿæ˜¯å…ˆè©¦åœ–打開在當å‰ç›®éŒ„ä¸çš„這蚗仵蛂A接下來,
如果沒有找到,shell å°‡æœç´¢ç¨¿æœ¬çš„ PATH 環境變é‡ä¸çš„路徑。
(INVOCATION)
login shell 登入 shellï¼Œåƒæ•¸é›¶çš„第一茼r符是 - ,或者啟動時指定了
--login é¸é …çš„ shell。
interactive 交互的 shell,是一è“ç§å‹ç¦¸S有指定éžé¸é …çš„åƒæ•¸ï¼Œä¸¦ä¸”沒有指定
-c é¸é …,標準輸出和標準輸入都連接到了終端 (在 isatty(3) ä¸åˆ¤å®š)
çš„shell,或者啟動時指定了 -i é¸é …çš„ shell。如果 bash 是交互的, PS1
環境變é‡å°‡è¢«è¨ç½®ï¼Œä¸¦ä¸” $- åŒ…å« i ,å…許一 shell 稿本或者一-
è“ç§å²ä»µèš³èš—侅這一狀態。
ä¸‹åˆ—æ®µè½æz了 bash 如何執行它的啟動檔案。如果這些啟動檔案ä¸çš„任一-
茼s在但是ä¸å¯è®€å–, bash å°‡å ±å‘Šä¸€èš‡æ¬ž~。檔åä¸çš„æ³¢æµªè™Ÿ (~,tilde) å°‡åƒ
EXPANSION ç« ç¯€ä¸ Tilde Expansion 段æz的那樣展開。
當 bash 是作為交互的登入 shell 啟動的,或者是一茷D交互的 shell
但是指定了 --login é¸é …, 它漸讀å–並執行 /etc/profile ä¸çš„命令,åªné‚£-
蚗仵蛈s在。 讀å–那蚗仵蚺妨寣Aå®ƒä»¥å¦‚ä¸‹çš„é †åºæŸ¥æ‰¾ ~/.bash_profile,
~/.bash_login, å’Œ ~/.profile, 從å˜åœ¨ä¸¦ä¸”å¯è®€çš„第一-
蚗仵蚺勿爸並執行其ä¸çš„命令。 --noprofile é¸é …å¯ä»¥ç”¨ä¾†åœ¨ shell
啟動時阻æ¢å®ƒé€™æ¨£åšã€‚
當一茧nå…¥ shell 退出時, bash 讀å–並執行檔案 ~/.bash_logout
ä¸çš„命令,åªn它å˜åœ¨ã€‚
當一茈璊洩 shell 但䏿˜¯ç™»å…¥ shell 啟動時, bash 從檔案 ~/.bashrc
ä¸è®€å–並執行命令,åªn它å˜åœ¨ã€‚å¯ä»¥ç”¨ --norc é¸é …來阻æ¢å®ƒé€™æ¨£åšã€‚
--rcfile file é¸é …將強制 bash 讀å–並執行檔案 file ä¸çš„å‘½ä»¤ï¼Œè€Œä¸æ˜¯
~/.bashrc ä¸çš„。
ç•¶ bash 以éžäº¤äº’的方å¼å•Ÿå‹•時,例如在é‹è¡Œä¸€ shell
ç¨¿æœ¬æ™‚ï¼Œå®ƒåœ¨ç’°å¢ƒä¸æŸ¥æ‰¾è®Šé‡ BASH_ENV ,如果它å˜åœ¨å‰‡å°‡å®ƒçš„-
i開,使用展開的@為一蚗仵蛌漲W稱,讀å–並執行。 Bash
é‹ä½œçš„éŽç¨‹å°±å¦‚åŒåŸ·è¡Œäº†ä¸‹åˆ—命令:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
但是沒有使用 PATH 變é‡çš„虓j索那蚗犰W。
如果 bash 以å稱 sh 啟動,它試圖模仿 (mimic) sh
æ·å²ç‰ˆæœ¬çš„啟動éŽç¨‹ï¼Œç›¡å¯èƒ½åœ°ç›¸ä¼¼ï¼ŒåŒæ™‚也éµå¾ª POSIX 標準。
當作為交互å¼ç™»å…¥ shell 啟動時,或者是éžäº¤äº’但使用了 --login é¸é …
啟動的時,它漸嘗試讀å–並執行檔案 /etc/profile å’Œ ~/.profile, ä¸çš„命令.
é¸é … --noprofile 用於é¿å…這種行為.當使用命令 sh 來啟動一茈璊泵〞 shell
時, bash æŸ¥æ‰¾ç’°å¢ƒè®Šé‡ ENV, 如果有定義的話就擴展它的,然後使用擴展後的-
@為n讀å–和執行的檔案 çš„å稱.由於使用 sh 啟動的 shell
䏿œƒè®€å–和執行任何其他的啟動檔案,é¸é … --rcfile 沒有æ„義.使用å稱 sh
啟動的éžäº¤äº’çš„ shell 䏿œƒè®€å–任何其他啟動檔案.當以 sh 啟動時, bash
在讀å–啟動檔案之後進入 posix 模å¼.
ç•¶ bash 以 posix 模å¼å•Ÿå‹•時,(和使用 --posix å‘½ä»¤è¡Œåƒæ•¸æ•ˆæžœç›¸åŒ),它éµå¾ª
POSIX 標準. 這種模å¼ä¸‹,äº¤äº’å¼ shell 擴展 ENV 環境變é‡çš„-
,讀å–並執行以擴展後å¯çаWçš„é…置檔案. 䏿œƒè®€å–其他檔案.
Bash è©¦è‘—æª¢æ¸¬å®ƒæ˜¯ä¸æ˜¯ç”±é 程 shell 守è·ç¨‹å¼,通常為 rshd 啟動的.如果 bash
發ç¾å®ƒæ˜¯ç”± rshd 啟動的,它將讀å–並執行 ~/.bashrc 檔案ä¸çš„命令, åªn這-
蚗仵蛈s在並且å¯è®€.如果以 sh 命令啟動,å®ƒä¸æœƒé€™æ¨£åš. é¸é … --norc
å¯ä»¥ç”¨ä¾†é˜»æ¢é€™ç¨®è¡Œç‚º,é¸é … --rcfile 用來強制讀å–å¦ä¸€èš—仵,但是通常 rshd
䏿œƒå…許它, 或者用它怢è“ç§ shell.
如果 shell 是以與真實使用者(組) id ä¸åŒçš„æœ‰æ•ˆä½¿ç”¨è€…(組) id 來啟動的,
並且沒有 - é¸é …,é‚£éº¼å®ƒä¸æœƒè®€å–啟動檔案, ä¹Ÿä¸æœƒå¾žç’°å¢ƒä¸ç¹¼æ‰¿ shell 函數.
環境變é‡ä¸å¦‚æžœå‡ºç¾ SHELLOPT A 它將被忽略.有效使用者 id
å°‡è¨ç½®ç‚ºçœŸå¯¦ä½¿ç”¨è€… id. 如果啟動時給出了 -
é¸é …,那麼啟動時的行為是類似的, ä½†æ˜¯ä¸æœƒå§œm有效使用者 id.
q(DEFINITIONS)
下列定義在文件餘下部分ä¸é€šç”¨.
blank 白
ä¸€èŒ èº“ç’ˆå³ŽO tab .
word詞
一茼r符åºåˆ—, shell 將它拑欓陘@茧硎c單元. 也稱為一 token片段。
name
一茈uç”±å—æ¯,數å—和下劃線構æˆçš„詞,並且以å—符或下劃線起始.
也稱為一 word identifier標è˜ç¬¦.
metacharacter
一茼r符, å¦‚æžœä¸æ˜¯å¼•用的話, å°‡æˆç‚ºè©žçš„分隔符. 它是如下å—符之一:
| & ; ( ) < > space tab
control operator
一 token(標è˜), æ“æœ‰æŽ§åˆ¶åŠŸèƒ½. 它是如下符號之一:
|| & && ; ;; ( ) | <newline>
Reserved words(ä¿ç•™å—) æ˜¯å° shell 有特殊æ„義的詞.
下列詞被è˜åˆ¥ç‚ºä¿ç•™çš„, å¦‚æžœä¸æ˜¯å¼•用, 䏦䏔䏿˜¯ä¸€èš‹çœ¾ç’ˆR令的起始詞
(åƒè¦‹ä¸‹æ‚¸ shel k("SHELL GRAMMAR") ), ä¹Ÿä¸æ˜¯ case 或者 for
命令的第三茧:
! case do done elif else esac fi for function if in select then until
while { } time [[ ]]
Simple Commands O
simple command(簡單命令) 是(å¯é¸çš„)一系列變é‡è³¦, 緊接著是 blank(ç©ºæ ¼)
分隔的詞和咿wå‘, 然後以一 control operator çµæŸ. 第一茧指明了-
n執行的命令, 它被作為第 0 èŒæŠ. 其餘詞被作為這茤Rä»¤çš„åƒæ•¸.
simple command 簡單命令的返回O它的退出狀態, 或是 128+n, 如果命令被
signal(信號) n çµæŸçš„話.
Pipelines D
pipeline(管é“) 是一茤峖h茤R令的åºåˆ—,用å—符 | 分隔。管é“çš„æ ¼å¼æ˜¯é€™æ¨£:
[time [-p]] [ ! ] command [ | command2 ... ]
命令 command 的標準輸出通éŽç®¡é“連接到命令 command2
的標準輸入。連接是在命令指定的任何咿wå‘之å‰é€²è¡Œçš„(åƒè¦‹ä¸‹æ‚¸ REDIRECTION
V C
如果ä¿ç•™å— ! 作為管é“å‰ç¶´ï¼Œç®¡é“的退出狀態將是最後一-
茤R令的退出狀態的é‚輯éžïŸ«C å¦å‰‡ï¼Œç®¡é“的退出狀態就是最後一茤R令的。
shell 在返回退出狀態妨e,ç‰å¾…管é“ä¸çš„æ‰€æœ‰å‘½ä»¤è¿”回。
如果ä¿ç•™å— time
作為管é“å‰ç¶´ï¼Œç®¡é“䏿¢å¾Œå°‡çµ¦å‡ºåŸ·è¡Œç®¡é“耗費的使用者和系統時間。 é¸é … -p
å°‡ä½¿è¼¸å‡ºç¬¦åˆ POSIX æŒ‡å®šçš„æ ¼å¼ã€‚ ç’°å¢ƒè®Šé‡ TIMEFORMAT å¯ä»¥è¨ç½®ç‚ºä¸€-
è‡ç’’rç¬¦ä¸²ï¼ŒæŒ‡å®šæ™‚é–“ä¿¡æ¯æ‡‰ç•¶å¦‚何顯示;åƒè¦‹ä¸‹æ‚¸ Shell Variables
q ä¸ TIMEFORMAT 的講z。
管é“ä¸çš„æ¯èŒ¤R令都作為單ç¨çš„進程來執行(å³ï¼Œåœ¨ä¸€èŒªl shell ä¸å•Ÿå‹•)。
Lists C
list(åºåˆ—)是一茤峖h蚨ç‘D,用æ“作符 ;, &, &&, 或 || 分隔的åºåˆ—,
並且å¯ä»¥é¸æ“‡ç”¨ ;, &, 或 <newline>æ–°è¡Œç¬¦çµæŸ.
這些åºåˆ—æ“作符ä¸ï¼Œ && å’Œ || 優先級相åŒï¼Œå…¶æ¬¡æ˜¯ ; å’Œ &, 它-
æ€ç‘°u先級是相åŒçš„。
åºåˆ—ä¸å¯ä»¥æœ‰ä¸€èŒ¤å³–h虓sè¡Œç¬¦ä¾†åˆ†éš”å‘½ä»¤ï¼Œè€Œä¸æ˜¯ä½¿ç”¨åˆ†è™Ÿåˆ†éš”。
如果一茤R令是由控制æ“作符 & çµæŸçš„, shell 將在I景的å shell ä¸åŸ·è¡Œé€™-
茤R令。 shell 䏿œƒç‰å¾…å‘½ä»¤åŸ·è¡ŒçµæŸï¼Œè¿”回狀態總是 0。以分號 ;
åˆ†éš”çš„å‘½ä»¤æœƒè¢«é †åºåŸ·è¡Œï¼›shell 會ç‰å¾…æ¯-
茤R令便¬¡çµæŸã€‚返回狀態是最後執行的命令的返回狀態。
控制æ“作符 && å’Œ || 分別代表 AND å’Œ OR åºåˆ—。一 AND åºåˆ—çš„å½¢å¼æ˜¯
command1 && command2
command2 åªæœ‰åœ¨ command1 返回 0 時æ‰è¢«åŸ·è¡Œã€‚
一 OR åºåˆ—çš„å½¢å¼æ˜¯
command1 || command2
command2 åªæœ‰åœ¨ command1 è¿”å›žéž 0 狀態時æ‰è¢«åŸ·è¡Œã€‚AND å’Œ OR
åºåˆ—的返回狀態是åºåˆ—䏿œ€å¾ŒåŸ·è¡Œçš„命令的返回狀態。
Compound Commands O
compound command(復åˆå‘½ä»¤) 是如下情æ³ä¹‹ä¸€ï¼š
(list) list åºåˆ—將在一茪l shell ä¸åŸ·è¡Œã€‚變é‡è³¦ïŸ³M影響 shell
環境變é‡çš„å…§å»ºå‘½ä»¤åœ¨å‘½ä»¤çµæŸå¾Œä¸æœƒå†èµ·ä½œç”¨ã€‚ 返回Oåºåˆ—的返回-
C
{ list; }
list åºåˆ—å°‡åœ¨ç•¶å‰ shell 環境ä¸åŸ·è¡Œã€‚åºåˆ—å¿…é ˆä»¥ä¸€-
虓sè¡Œç¬¦æˆ–åˆ†è™ŸçµæŸã€‚ é€™ç¨®åšæ³•也稱為 group command(命令組)。返回-
Oåºåˆ—的返回C注æ„與元å—符 ( å’Œ ä¸åŒï¼Œ { å’Œ } 是 reserved
words(ä¿ç•™å—)ï¼Œå¿…é ˆå‡ºç¾åœ¨èƒ½å¤ è˜åˆ¥ä¿ç•™å—çš„å ´åˆã€‚ 由於它-
怳ㄦ|產生斷詞(cause a word break),它æ€Måºåˆ—ä¹‹é–“å¿…é ˆç”¨ç©ºæ ¼åˆ†é–‹ã€‚
((expression))
表é”å¼ expression 將被求C求W則在下悸 D (ARITHMETIC
EVALUATION) ç« ç¯€ä¸æz。如果表é”å¼çš„D零,返回N是 0ï¼›å¦å‰‡è¿”回-
O 1ã€‚é€™ç¨®åšæ³•å’Œ let "expression" ç‰åƒ¹ã€‚
[[ expression ]]
返回 0 或 1ï¼Œå–æ±ºæ–¼æ¢ä»¶è¡¨é”å¼ expression 求滷〞p。
表é”弿˜¯ç”±ä¸‹ CONDITIONAL EXPRESSIONS ç« ç¯€ä¸æzçš„-
å„¢y(primaries) 組æˆã€‚ [[ å’Œ ]]
ä¸çš„è©žä¸æœƒé€²è¡Œè©žçš„æ‹†åˆ†å’Œè·¯å¾‘的擴展處ç†ï¼› 而tilde
æ“´å±•ï¼Œåƒæ•¸å’Œè®Šé‡æ“´å±•,算術擴展,命令替æ›ï¼Œå‡½æ•¸æ›¿æ›å’Œå¼•用的去除則都將進行。
當使用 == å’Œ != æ“作符時,æ“作符å³é‚Šçš„å—符串被èªç‚ºæ˜¯ä¸€-
èšç‹¾ï¹›Aæ ¹æ“šä¸‹ Pattern Matching(模å¼åŒ¹é…) ç« ç¯€ä¸çš„è¦å‰‡é€²è¡ŒåŒ¹é…。
如果匹é…則返回O 0,å¦å‰‡è¿”回
1。模å¼çš„任何部分å¯ä»¥è¢«å¼•用,強制使它作為一茼r符串而被匹é…。
表é”å¼å¯ä»¥ç”¨ä¸‹åˆ—æ“作符çµåˆèµ·ä¾†ã€‚æ ¹æ“šå„ªå…ˆç´šçš„é£¢ï“C出如下:
( expression )
返回表é”å¼ expression çš„-
C括號å¯ä»¥ç”¨ä¾†æå‡æ“作符的優先級。
! expression
返回真,如果表é”å¼ expression 返回å‡ã€‚
expression1 && expression2
返回真,如果表é”å¼ expression1 å’Œ expression2 都返回真。
expression1 || expression2
返回真,如果表é”å¼ expression1 或者 expression2
二者之一返回真。
&&(與) å’Œ || æ“ä½œç¬¦ä¸æœƒå°è¡¨é”å¼ expression2 求A如果 expres-
sion1 å¯ä»¥æ±ºå®šæ•´è“囓顗ç«Få¼çš„返回爾隉C
for name [ in word ] ; do list ; done
in 之後的一系列詞會被擴展,產生一èˆç‰åŸµCè¡¨ã€‚è®Šé‡ name
è¢«ä¾æ¬¡è³¦ä»¥é€™èŒ¼C表ä¸çš„æ¯èŒªè‘›åšA åºåˆ— list æ¯æ¬¡éƒ½è¢«åŸ·è¡Œã€‚如果 in
word 被忽略,那麼 for 命令鿷 å·²è¨ç½®çš„ä½ç½®åƒæ•¸(positional
parameter,åƒè¦‹ä¸‹æ‚¸ PARAMETERS A 為æ¯ä¸€èŒé¶¡ç’Š@次åºåˆ—
list。 返回O最後一茤R令的返回C如果 in
ä¹‹å¾Œçš„è©žæ“´å±•çš„çµæžœæ˜¯ç©ºåˆ—è¡¨ï¼Œå°±ä¸æœƒåŸ·è¡Œä»»ä½•命令,返回O 0。
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
漸,算術表é”å¼ expr1 è¢«æ ¹æ“šä¸‹ D (ARITHMETIC EVALUA-
TION u ä¸çš„è¦å‰‡é€²è¡Œæ±‚C 然後算術表é”å¼ expr2 被循環求-
Aç›´åˆ°å®ƒç‰æ–¼ 0ã€‚æ¯æ¬¡ expr2 çµæžœéžé›¶æ™‚,åºåˆ— list 都被執行,
算術表é”å¼ expr3 被求C如果任何表é”å¼è¢«å¿½ç•¥ï¼Œå°‡è¢«è¦–ç‚ºåŸ·è¡Œçµæžœæ˜¯
1。 返回Oåºåˆ— list ä¸è¢«åŸ·è¡Œçš„æœ€å¾Œä¸€èŒ¤R令的返回F或者是
false,如果任何表é”å¼éžæ³•的話。
select name [ in word ] ; do list ; done
in 之後的一系列詞會被擴展,產生一èˆç‰åŸµC表。這-
èš‹X展後的詞集åˆè¢«è¼¸å‡ºåˆ°æ¨™æº–錯誤上,æ¯èŒ·e åŠ ä¸Šä¸€èšïš¶r。如果 in
word 被忽略,將輸出ä½ç½®åƒæ•¸ (åƒè¦‹ä¸‹æ‚¸ PARAMETERS æ•¸ç« ç¯€)。
PS3 æç¤ºç¬¦å°‡è¢«é¡¯ç¤ºå‡ºä¾†ï¼Œç‰å¾…從標準輸入得到一行輸入。如果
輸入是一èšïš¶rä¸”é¡¯ç¤ºä¸æœ‰å°æ‡‰çš„è©žï¼Œé‚£éº¼è®Šé‡ name 的Nè¨ç½®ç‚ºé€™-
茧。如果輸入一-
èŒ è‡Ÿç¢A那麼詞和æç¤ºç¬¦å°‡å†æ¬¡é¡¯ç¤ºå‡ºä¾†ã€‚如果讀入了一
EOFï¼Œå‘½ä»¤å°±çµæŸã€‚ 任何其他Nè¨ç½®è®Šé‡ name
為空。讀入的行ä¿å˜ç‚ºè®Šé‡ REPLY. åºåˆ— list
åœ¨æ¯æ¬¡é¸æ“‡ä¹‹å¾Œéƒ½æœƒåŸ·è¡Œï¼Œç›´åˆ°åŸ·è¡Œäº†ä¸€ break 命令。 select
的退出狀態是åºåˆ— list ä¸åŸ·è¡Œçš„æœ€å¾Œä¸€-
茤R令的退出狀態,如果沒有執行命令就是 0。
case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
case 命令漸擴展 word, ç„¶å¾Œä¾æ¬¡è©¦è‘—ç”¨æ¯ pattern 來匹é…它,
使用與路徑擴展相åŒçš„匹é…è¦å‰‡(åƒè¦‹ä¸‹æ‚¸ Pathname Expansion
i ç« ç¯€)。如果找到一茪ït,相應的åºåˆ—將被執行。找到一-
茪ïtä¹‹å¾Œï¼Œä¸æœƒå†å˜—試其後的匹é…。 如果沒有模å¼å¯ä»¥åŒ¹é…,返回O
0。å¦å‰‡ï¼Œè¿”回åºåˆ—䏿œ€å¾ŒåŸ·è¡Œçš„命令的返回C
if list; then list; [ elif list; then list; ] ... [ else list; ] fi
åºåˆ— if list 被執行。如果退出狀態是 0,then list
將被執行。å¦å‰‡ï¼Œæ¯ elif 將被一次執行,如果退出狀態是 0,相應的
then list å°‡è¢«åŸ·è¡Œï¼Œå‘½ä»¤çµæŸã€‚ å¦å‰‡ï¼Œelse list
將被執行,如果å˜åœ¨çš„話。
退出狀態是最後執行的命令的退出狀態,或者是
0,如果所有æ¢ä»¶éƒ½ä¸æ»¿è¶³ã€‚
while list; do list; done
until list; do list; done
while 命令䏿–·åœ°åŸ·è¡Œåºåˆ— do list,直到åºåˆ—䏿œ€å¾Œä¸€èŒ¤R令返回 0。
until 命令和 while 命令ç‰åƒ¹ï¼Œé™¤äº†å°æ¢ä»¶çš„æ¸¬è©¦æ°å¥½ç›¸åï¼›åºåˆ— do
list 執行直到åºåˆ—䏿œ€å¾Œä¸€èŒ¤R令返回éžé›¶ç‹€æ…‹ïŸ«C while å’Œ until
命令的退出狀態是åºåˆ— do list 䏿œ€å¾Œä¸€èŒ¤R令的退出狀態, 或者是
0,如果沒有執行任何命令。
[ function ] name () { list; }
這樣å¯ä»¥å®šç¾©ä¸€èŒ¼W為 name 的函數。函數體 body 是包å«åœ¨ { å’Œ }
之間的命令åºåˆ— list。 在指定將 name 作為一茤R令é‹è¡Œçš„å ´åˆï¼Œé€™-
èï“C將被執行。
函數的退出狀態是函數體最後執行的命令的退出狀態(åƒè¦‹ä¸‹æ‚¸ FUNC-
TIONS æ•¸ç« ç¯€)。
(COMMENTS)
在éžäº¤äº’çš„ shell 䏿ˆ–者使用內建命令 shopt 啟用了 interactive_comments
é¸é …的交互的 shell ä¸ï¼Œä»¥ # 起始的詞使得這-
茧和所有åŒä¸€è¡Œä¸Šæ‰€æœ‰å‰©é¤˜çš„å—符都被忽略。沒有啟用 interactive_comments
é¸é …çš„äº¤äº’å¼ shell ä¸å…è¨±å‡ºç¾æ³¨é‡‹ã€‚é€™èš‡é¾ ç–bäº¤äº’å¼ shell 䏿˜¯é è¨å•Ÿç”¨çš„
(åƒè¦‹ä¸‹æ‚¸ shell O(SHELL BUILTIN COMMANDS) ç« ç¯€)。
(QUOTING)
引用 Quoting
用來去掉特定å—符或詞的特殊æ„義。引用å¯ä»¥ç”¨ä¾†ç¦æ¢å°ç‰¹æ®Šå—符的處ç†ï¼Œ
阻æ¢ä¿ç•™å—被è˜åˆ¥ï¼Œé‚„用來阻æ¢åƒæ•¸çš„æ“´å±•。
上惘b DEFINITIONS q ä¸åˆ—出的æ¯èŒªè’‚r符 metacharacters å°æ–¼ shell
都有特殊æ„義。如果n表é”å®ƒçš„æœ¬ç¾©ï¼Œå¿…é ˆå¼•ç”¨å®ƒã€‚
在使用命令行æ·å²æ“´å±•功能時,history expansion å—符,通常是
!ï¼Œå¿…é ˆè¢«å¼•ç”¨ï¼Œæ‰ä¸æœƒé€²è¡Œæ·å²æ“´å±•。
有三種引用機制:轉義å—符 (escape character), 單引號和雙引號。
一茈撲Qå¼•ç”¨çš„åæ–œæ§“ (\) 是轉義å—符 escape character。 它ä¿ç•™å…¶å¾Œä¸‹ä¸€-
茼rç¬¦çš„å—æ§N義,除éžé‚£æ˜¯ä¸€è™“s行符。 如果 \
和新行符æˆå°å‡ºç¾ï¼Œä¸¦ä¸”åæ–œæ§“自豕S有被引用,那麼 \<newline>
被視為續行標誌 (æ„æ€æ˜¯ï¼Œå®ƒè¢«å¾žè¼¸å…¥æµä¸åˆªé™¤ä¸¦å¿½ç•¥äº†)。
å°‡å—符放在單引號之ä¸ï¼Œå°‡ä¿ç•™å¼•ç”¨ä¸æ‰€æœ‰å—符的å—-
æ§N義。單引號ä¸èƒ½åŒ…å«åœ¨å–®å¼•號引用之ä¸ï¼Œå³ä½¿å‰æ‚¼[ä¸Šäº†åæ–œæ§“。
å°‡å—符放在雙引號ä¸ï¼ŒåŒæ¨£ä¿ç•™æ‰€æœ‰å—ç¬¦çš„å—æ§Nç¾©ï¼Œä¾‹å¤–çš„æƒ…æ³æ˜¯ $, `, å’Œ
\。 å—符 $ å’Œ ` 在雙引號ä¸ä»ç„¶å…·æœ‰ç‰¹æ®Šæ„ç¾©ã€‚åæ–œæ§“åªæœ‰å¾Œ-
惇O下列å—ç¬¦æ™‚æ‰æœ‰ç‰¹æ®Šæ„義: $, `, ", \, 或 <newline>.
雙引號å¯ä»¥åŒ…å«åœ¨é›™å¼•號引用ä¸ï¼Œä½†nåœ¨å‰æ‚¼[上一茪炱袟b。
ç‰¹æ®Šçš„åƒæ•¸ * å’Œ @ åœ¨é›™å¼•è™Ÿä¸æœ‰ç‰¹æ®Šæ„義(åƒè¦‹ä¸‹æ‚¸ PARAMETERS 數
ç« ç¯€)。
å½¢å¼ç‚º $'string' 的詞會被特殊處ç†ã€‚它被擴展為
string,其ä¸çš„åæ–œæ§“轉義å—符 被替æ›ç‚º ANSI C
標準ä¸è¦å®šçš„å—ç¬¦ã€‚åæ–œæ§“轉義åºåˆ—,如果å˜åœ¨çš„話,將åšå¦‚下轉æ›ï¼š
\a alert (bell) 響鈴
\b backspace 回退
\e an escape character å—符 Esc
\f form feed 進紙
\n new line 新行符
\r carriage return 回車
\t horizontal tab 水斥鶖
\v vertical tab è±Žç›´è·³æ ¼
\\ backslash åæ–œæ§“
\' single quote 單引號
\nnn 一茪K比特å—符,它的O八進制 nnn (一到三èšïš¶r)。
\xHH 一茪K比特å—符,它的Oåå…進制 HH (一到兩-
茪Qå…進制數å—)。
\cx 一 ctrl-x å—符
æ“´å±•çµæžœæ˜¯å–®å¼•è™Ÿå¼•ç”¨çš„ï¼Œå°±å¥½åƒ $ 符號ä¸å˜åœ¨ä¸€æ¨£ã€‚
雙引號引用å—ç¬¦ä¸²å‰æ‚¼[上一 $ 符號將使得這茼rç¬¦ä¸²è¢«æ ¹æ“šç•¶å‰èªžè¨€ç’°å¢ƒ
(locale) 來翻è¯ã€‚ 如果當å‰èªžè¨€ç’°å¢ƒæ˜¯ C 或者 POSIX,這茞顫僚N被忽略。
如果這茼r符串被翻è¯ä¸¦æ›¿æ›äº†ï¼Œé‚£éº¼æ›¿æ›çµæžœæ˜¯é›™å¼•號引用的。
(PARAMETERS)
ä¸€èŒæŠ parameter 是一蚗xå˜ïŸ´çŠ’ç¯˜æ†¿C它å¯ä»¥æ˜¯ä¸€èŒ¼W稱 name, 一-
èšïš¶r或者是下 Special Parameters ç« ç¯€ä¸åˆ—出的特殊å—符之一。從
shell 的角度來看,一蚥僆q variable 是一茈æ‚W稱 name ä»£è¡¨çš„åƒæ•¸ã€‚一-
蚥僆q有一蚧 value 以åŠé›¶èŒ¤å³–hèš…æ£ attibutes。屬性å¯ä»¥ä½¿ç”¨å…§å»ºå‘½ä»¤
declare 來è¨ç½®(åƒè¦‹ä¸‹ shell O(SHELL BUILTIN COMMANDS) ç« ç¯€ä¸å°
declare çš„æz)。
å¦‚æžœçµ¦ä¸€èŒæŠï›æ…’,那麼它就被定義了。空å—符串是有效的C一旦一-
蚥僆q被定義了,它åªèƒ½ç”¨å…§å»ºå‘½ä»¤ unset 來喿¶ˆ(åƒè¦‹ä¸‹ shell
O(SHELL BUILTIN COMMANDS) ç« ç¯€).
一蚥僆q variable å¯ä»¥ç”¨é€™æ¨£çš„語å¥å½¢å¼ä¾†è³¦ïŸ«G
name=[value]
如果沒有給出 value A 變é‡å°±è¢«è³¦ç‚ºç©ºå—符串。所有 values
都經éŽäº†æ³¢æµªç·šæ“´å±•ï¼Œåƒæ•¸å’Œè®Šé‡æ“´å±•,命令替æ›ï¼Œç®—術擴展和引用的刪除(åƒè¦‹ä¸‹-
悸 EXPANSION i ç« ç¯€)。如果變é‡è¨ç½®äº† integer 數屬性,那麼 value
將進行算術擴展,å³ä½¿æ²’有應用 $((...)) 擴展 (åƒè¦‹ä¸‹æ‚¸ Arithmetic Expan-
sion i ç« ç¯€)。 䏿œƒé€²è¡Œè©žçš„æ‹†åˆ†ï¼Œé™¤éžæ˜¯ä¸‹ Special Parameters
ä¸æåˆ°çš„ "$@"。 䏿œƒé€²è¡Œè·¯å¾‘的擴展。賦-
ï …yå¥ä¹Ÿå‡ºç¾åœ¨ä¸‹åˆ—內建命令ä¸ï¼Œä½œç‚ºå®ƒæ€æ»ŒæŠïš±G declare, typeset, export,
readonly, 和 local 。
Positional Parameters
ä½ç½®åƒæ•¸ positional parameter 是以一或多èšïš¶rä»£è¡¨çš„åƒæ•¸ï¼Œé™¤äº†
0。ä½ç½®åƒæ•¸æ˜¯åœ¨ shell å•Ÿå‹•æ™‚ï¼Œæ ¹æ“šå®ƒçš„åƒæ•¸ä¾†è³¦ïŸ´æ»¿A 也å¯ä»¥ç”¨å…§å»ºå‘½ä»¤
set 來å¥s賦Cä½ç½®åƒæ•¸ä¸èƒ½ç”¨è³¦ï …yå¥ä¾†è³¦ïŸ«C在一 shell 函數被執行的時-
唌Aä½ç½®åƒæ•¸æœƒè¢«æš«æ™‚åœ°æ›¿æ›æŽ‰ (åƒè¦‹ä¸‹æ‚¸ FUNCTIONS æ•¸ç« ç¯€)。
ç•¶ä½ç½®åƒæ•¸ç”±å…©èŒˆHä¸Šçš„æ•¸å—æ§‹æˆæ™‚ï¼Œå®ƒå¿…é ˆæ”¾åœ¨æ‹¬è™Ÿå…§ (åƒè¦‹ä¸‹æ‚¸ EXPANSION
i ç« ç¯€)。
Special Parameters
shell å°ä¸€äº›åƒæ•¸åšç‰¹æ®Šè™•ç†ã€‚é€™äº›åƒæ•¸åªèƒ½è¢«å¼•用而ä¸èƒ½è¢«è³¦ïŸ«C
* 擴展為ä½ç½®åƒæ•¸ï¼Œå¾ž 1 開始。如果擴展發生在雙引號ä¸ï¼Œå®ƒæ“´å±•為一-
茧,Oå„èŒæŠïš±Aä»¥ç‰¹æ®Šè®Šé‡ IFS 的第一茼r符分隔。也就是說,"$*"
ç‰åƒ¹æ–¼ "$1c$2c..."ï¼Œé€™è£ c æ˜¯è®Šé‡ IFS 的第一茼r符。如果沒有è¨ç½®
IF A é‚£éº¼åƒæ•¸å°‡ç”¨ç©ºæ ¼åˆ†éš”。 IFS
@ 擴展為ä½ç½®åƒæ•¸ï¼Œå¾ž 1 開始。如果擴展發生在雙引號ä¸ï¼Œæ¯-
èŒæŠï›ƒã„ N擴展為一茧。也就是說, "$@" ç‰åƒ¹æ–¼ "$1" "$2" ...
如果ä½ç½®åƒæ•¸ä¸å˜åœ¨ï¼Œ"$@" å’Œ $@ 擴展為空 (å³ï¼Œå®ƒæŠQ刪除了)。
# 擴展為ä½ç½®åƒæ•¸çš„èšïš±A以å進制表示。
? 擴展為最近執行的å‰å°ç®¡é“的狀態。
- 擴展為當å‰é¸é …標誌。標誌是在啟動時或以內建命令 set
指定的,或者是 shell 自迅]置的 (例如é¸é … -i )。
$ 擴展為 shell 的進程 ID。在一 () å shell ä¸ï¼Œå®ƒæ“´å±•ç‚ºç•¶å‰ shell
çš„ 進程 ID è€Œä¸æ˜¯å shell 的。
! 擴展為最近一次執行的I景 (ç•°æ¥) 命令的進程號。
0 擴展為 shell 或者 shell 稿本的å稱。這蚥僆q是在 shell
åˆå§‹åŒ–時è¨ç½®çš„。如果 bash 是執行稿本檔案時啟動的, $0
å°‡è¨ç½®ç‚ºé‚£èš—仵蛌漲W稱。如果 bash å•Ÿå‹•æ™‚çš„åƒæ•¸åŒ…å« - A 那麼 $0
被è¨ç½®ç‚ºå•Ÿå‹•命令行被執行後的第一-
èŒæŠïš±A如果有的話。å¦å‰‡ï¼Œå®ƒè¢«è¨ç½®ç‚ºç”¨ä¾†å•Ÿå‹• bash
的檔åï¼Œå°±æ˜¯åƒæ•¸ 0。
_ shell 啟動時,è¨ç½®ç‚º shell æˆ–åƒæ•¸ä¸è¢«åŸ·è¡Œçš„ shell
稿本的絕å°è·¯å¾‘å。 然後,在擴展時擴展為上一茤R令的最後一-
èŒæŠïš±C它也被è¨ç½®ç‚ºè¢«åŸ·è¡Œçš„æ¯èŒ¤R令的檔案全å並且 被è¨ç½®åˆ°é€™-
茤R令執行的環境當ä¸ã€‚當檢查郵件時,這-
èŒæŠïš»Oå˜è‘—æ£åœ¨æª¢æŸ¥çš„郵件檔案的å稱。
Shell Variables q
shell 定義了下列變é‡ï¼š
BASH æ“´å±•ç‚ºç”¨ä¾†å•Ÿå‹•ç•¶å‰ bash 實例的檔案全å。
BASH_VERSINFO
一茈u讀數組變é‡ï¼Œæˆä¿å˜è‘—ç•¶å‰ bash
實例的版本信æ¯ã€‚è³¦äºˆæ•¸çµ„å…ƒç´ çš„ïŸ¶O如下這些:
BASH_VERSINFO[0] 主版本號 (release).
BASH_VERSINFO[1] 次版本號 (version).
BASH_VERSINFO[2] 補ä¸ç‰ˆæœ¬
BASH_VERSINFO[3] ç·¨è¯ä¿¡æ¯
BASH_VERSINFO[4] 發佈時的狀態 (例如, beta1).
BASH_VERSINFO[5] MACHTYPE å•x類型
BASH_VERSION
擴展為一茼r符串,æz了這 bash. 實例的版本。
COMP_CWORD
${COMP_WORDS} 的索引,指å‘ç•¶å‰æ¸¸æ¨™ä½ç½®æ‰€åœ¨çš„詞。 這-
蚥僆qåªæœ‰åœ¨è¢«å¯ç·¨ç¨‹è£œå…¨åŠŸèƒ½ (åƒè¦‹ä¸‹æ‚¸ Programmable Completion
ç« ç¯€) 調用的 shell å‡½æ•¸ä¸æ‰å¯ç”¨ã€‚
COMP_LINE
ç•¶å‰å‘½ä»¤è¡Œã€‚這蚥僆qåªæœ‰åœ¨è¢«å‘½ä»¤è£œå…¨åŠŸèƒ½èª¿ç”¨çš„ shell
å‡½æ•¸å’Œå¤–éƒ¨å‘½ä»¤ä¸æ‰å¯ç”¨ã€‚
COMP_POINT
ç›¸å°æ–¼ç•¶å‰å‘½ä»¤èµ·å§‹è™•çš„ç•¶å‰æ¸¸æ¨™ä½ç½®ã€‚å¦‚æžœç•¶å‰æ¸¸æ¨™ä½ç½®æ˜¯ç•¶å‰å‘½ä»¤çš„æœ«ç«¯ï¼Œ
它的Nå’Œ ${#COMP_LINE} 相ç‰ã€‚ 這蚥僆qåªæœ‰åœ¨è¢«å‘½ä»¤è£œå…¨åŠŸèƒ½èª¿ç”¨çš„
shell å‡½æ•¸å’Œå¤–éƒ¨å‘½ä»¤ä¸æ‰å¯ç”¨ã€‚
COMP_WORDS
一èšï›‚桲僆q (åƒè¦‹ä¸‹æ‚¸ Arrays(數組)一節),由當å‰å‘½ä»¤è¡Œçš„å„-
茬瘚構æˆã€‚ 這蚥僆qåªæœ‰åœ¨è¢«å‘½ä»¤è£œå…¨åŠŸèƒ½èª¿ç”¨çš„ shell
å‡½æ•¸ä¸æ‰å¯ç”¨ã€‚
DIRSTACK
一-
èšï›‚桲僆q,包å«ç•¶å‰ç›®éŒ„棧的內容。棧ä¸çš„ç›®éŒ„æŽ’åˆ—çš„é †åºå°±æ˜¯ç”¨å…§å»ºå‘½ä»¤
dirs é¡¯ç¤ºæ™‚çš„é †åºã€‚å°é€™èšï›‚桲僆qçš„æˆè³¦ïŸ¯i以用來-
蚹鼢怳ä¸w有的目錄,但是næ·»åŠ å’Œåˆªé™¤ç›®éŒ„å°±å¿…é ˆä½¿ç”¨ 內建命令 pushd
å’Œ pop C å°å®ƒè³¦ïŸ®ã„¦|改變當å‰ç›®éŒ„ã€‚å¦‚æžœå–æ¶ˆäº† DIRSTACK
的定義,它就失去了它的特殊æ„義,å³ä½¿å¾Œä¾†å¥s定義它。
EUID 擴展為當å‰ä½¿ç”¨è€…的有效使用者 ID。它在 shell
啟動時è¨ç½®ã€‚它是åªè®€çš„。
FUNCNAME
ç•¶å‰åŸ·è¡Œçš„ shell 函數å。這蚥僆qåªæœ‰åœ¨åŸ·è¡Œä¸€ shell
函數時å˜åœ¨ã€‚å‘ FUNCNAME 賦S有效果並且返回一蚇欞~ã€‚å¦‚æžœå–æ¶ˆäº†
FUNCNAME 的定義,它就失去了特殊的æ„義,å³ä½¿å¾Œä¾†å¥s定義它。
GROUPS 一èšï›‚桲僆q,包å«ç•¶å‰ä½¿ç”¨è€…æ‰€å±¬çš„çµ„çš„åˆ—è¡¨ã€‚å‘ GROUPS 賦-
S有效果並且返回一蚇欞~ã€‚å¦‚æžœå–æ¶ˆäº† GROUPS
的定義,它就失去了特殊的æ„義,å³ä½¿å¾Œä¾†å¥s定義它。
HISTCMD
ç•¶å‰å‘½ä»¤çš„æ·å²ç·¨è™Ÿï¼Œæˆ–者æ·å²åˆ—表ä¸çš„ç´¢å¼•ã€‚å¦‚æžœå–æ¶ˆäº† HISTCMD
的定義,它就失去了特殊的æ„義,å³ä½¿å¾Œä¾†å¥s定義它。
HOSTNAME
自動è¨ç½®ç‚ºç•¶å‰çš„主機å。
HOSTTYPE
自動è¨ç½®ç‚ºä¸€èŒ¼r符串,唯一地標è˜è‘—æ£åœ¨é‹è¡Œ bash 的機器類型。é è¨-
O系統相關的。
LINENO æ¯æ¬¡å¼•ç”¨é€™èŒæŠï𾿰¶Ashell 將它替æ›ç‚ºä¸€-
茷示在稿本或函數ä¸ç•¶å‰è¡Œè™Ÿçš„å進制數å—(從 1 é–‹å§‹)。
å¦‚æžœä¸æ˜¯åœ¨ç¨¿æœ¬æˆ–函數ä¸ï¼Œæ›¿æ›å¾—到的ㄓ@定有æ„ç¾©ã€‚å¦‚æžœå–æ¶ˆäº†
LINENO 的定義,它就失去了特殊的æ„義,å³ä½¿å¾Œä¾†å¥s定義它。
MACHTYPE
自動è¨ç½®ç‚ºä¸€èŒ¼r符串,完整的æz了æ£åœ¨é‹è¡Œ bash
çš„ç³»çµ±é¡žåž‹ï¼Œæ ¼å¼æ˜¯æ¨™æº–çš„ GNU cpu-company-system æ ¼å¼ã€‚é è¨-
O系統相關的。
OLDPWD 上一次命令 cd è¨ç½®çš„工作目錄。
OPTARG 內建命令 getopts 處ç†çš„æœ€å¾Œä¸€èš‡é¾ ç²¥æŠï›˜ (åƒè¦‹ä¸‹æ‚¸ shell
O(SHELL BUILTIN COMMANDS) ç« ç¯€)。
OPTIND 內建命令 getopts 將處ç†çš„ä¸‹ä¸€èŒæŠïšºæ»²è–‘ (åƒè¦‹ä¸‹æ‚¸ shell
O(SHELL BUILTIN COMMANDS) ç« ç¯€)。
OSTYPE 自動è¨ç½®çš„一茼r符串,æz了æ£åœ¨é‹è¡Œ bash 的作æ¥ç³»çµ±ã€‚é è¨-
O系統相關的。
PIPESTATUS
一èšï›‚桲僆q (åƒè¦‹ä¸‹æ‚¸ Arrays 組
ç« ç¯€)ï¼ŒåŒ…å«æœ€è¿‘執行的å‰å°ç®¡é“ä¸çš„進程(å¯èƒ½åªåŒ…å«ä¸€-
茤R令)的退出狀態。
PPID shell 的父進程的進程號。這蚥僆q是åªè®€çš„。
PWD ç”± cd 命令è¨ç½®çš„ç•¶å‰å·¥ä½œç›®éŒ„。
RANDOM æ¯æ¬¡å¼•ç”¨é€™èŒæŠï𾿰¶A都會產生一 0 到 32767
之間的隨機整數。å¯ä»¥é€šéŽå‘ RANDOM 賦-
ïŸ²èŒ é´l化隨機數åºåˆ—ã€‚å¦‚æžœå–æ¶ˆäº† RANDOM
的定義,它就失去了特殊的æ„義,å³ä½¿å¾Œä¾†å¥s定義它。
REPLY 變é‡çš„N作為內建命令 read çš„è¼¸å…¥ï¼Œå¦‚æžœå‘½ä»¤æ²’æœ‰åƒæ•¸çš„話。
SECONDS
æ¯æ¬¡å¼•ç”¨é€™èŒæŠï𾿰¶A返回 shell 自é‹è¡Œä»¥ä¾†çš„ç§’æ•¸ã€‚å¦‚æžœå‘ SECONDS
賦Aæ¤å¾Œå°å®ƒçš„引用將返回自賦仱_çš„ç§’æ•¸åŠ ä¸Šæ‰€è³¦äºˆçš„ïŸ«Cå¦‚æžœå–æ¶ˆ
SECONDS 的定義,它就失去了特殊的æ„義,å³ä½¿å¾Œä¾†å¥s定義它。
SHELLOPTS
一茷_號分隔的被å…許的 shell é¸é …åˆ—è¡¨ã€‚åˆ—è¡¨ä¸æ¯èŒ§éƒ½æ˜¯å…§ç½®å‘½ä»¤
set çš„ -o é¸é …çš„æœ‰æ•ˆåƒæ•¸ã€‚ SHELLOPTS ä¸å‡ºç¾çš„é¸é …也是 set -o
顯示為 on çš„é¸é …。如果 bash å•Ÿå‹•æ™‚å¾žç’°å¢ƒä¸æ‰¾åˆ°é€™-
蚥僆q,那麼在讀å–任何é…置檔案之å‰ï¼Œåˆ—表ä¸çš„æ¯-
èš‡é¾ çµ¨ã„ N被è¨ç½®ã€‚這蚥僆q是åªè®€çš„。
SHLVL æ¯æ¬¡å•Ÿå‹•一 bash çš„å¯¦ä¾‹æ™‚éƒ½æœƒå¢žåŠ ã€‚
UID 擴展為當å‰ä½¿ç”¨è€…çš„ ID,在啟動時åˆå§‹åŒ–。這蚥僆q是åªè®€çš„。
下列變é‡è¢« shell 使用。有時 bash 會為變é‡è³¦é è¨ïŸ«F這些情æ³åœ¨ä¸‹æ§|標出。
BASH_ENV
如果 bash 在執行一 shell 稿本時è¨å®šäº†é€™èš¥åƒ†q,它的-
N被解釋為一蚗犰W, 包å«è‘—åˆå§‹åŒ– shell 用到的命令,就åƒ
~/.bashrc ä¸ä¸€æ¨£ã€‚ BASH_ENV 的b被解釋為一蚗犰W之å‰-
nç¶“éŽåƒæ•¸æ“´å±•,命令替æ›å’Œç®—è¡“æ“´å±•ã€‚ä¸æœƒä½¿ç”¨ PATH
ä¾†æŸ¥æ‰¾çµæžœæª”å。
CDPATH 命令 cd çš„æœç´¢è·¯å¾‘。這是一茷_號分隔的目錄列表,shell å¾žä¸æŸ¥æ‰¾ cd
命令的目標目錄。å¯ä»¥æ˜¯é€™æ¨£ï¼š ".:~:/usr".
COLUMNS
用在內建命令 select ç•¶ä¸ï¼Œç”¨ä¾†åˆ¤æ–·è¼¸å‡ºé¸æ“‡åˆ—表時的終端寬度。
è‡ªå‹•æ ¹æ“š SIGWINCH 信號來è¨ç½®ã€‚
COMPREPLY
一èšï›‚桲僆q,bash 從ä¸è®€å–å¯èƒ½çš„命令補全。
它是由命令補全功能調用的 shell 函數產生的。
FCEDIT 內建命令 fc é è¨çš„編輯器。
FIGNORE
一茷_號分隔的延伸檔åå列表,在進行檔å補全時被忽略 (åƒè¦‹ä¸‹æ‚¸
READLINE ç« ç¯€)。一-
茤ç–钀犰W滿足其ä¸ä¹‹ä¸€çš„æª”å被排除在匹é…的檔å之外。å¯ä»¥æ˜¯é€™æ¨£ï¼š
".o:~".
GLOBIGNORE
一茷_號分隔的模å¼åˆ—è¡¨ï¼Œå®šç¾©äº†è·¯å¾‘åæ“´å±•時n忽略的檔å集åˆã€‚
如果一蚗犰W與路徑擴展模å¼åŒ¹é…ï¼ŒåŒæ™‚åŒ¹é… GLOBIGNORE ä¸çš„一-
èšç‹¾ï¼†æ°¶A它被從匹é…列表ä¸åˆªé™¤ã€‚
HISTCONTROL
如果è¨ç½®ç‚º ignorespace, 以 space
é–‹é çš„è¡Œå°‡ä¸æœƒæ’入到æ·å²åˆ—表ä¸ã€‚如果è¨ç½®ç‚º ignoredups,
匹é…上一次æ·å²è¨˜éŒ„çš„è¡Œå°‡ä¸æœƒæ’入。è¨ç½®ç‚º ignoreboth
會çµåˆé€™å…©ç¨®é¸é …。如果沒有定義,或者è¨ç½®ç‚ºå…¶ä»–-
A所有解釋器讀å–的行都將å˜å…¥æ·å²åˆ—表, 但還nç¶“éŽ HISTIGNORE
處ç†ã€‚這蚥僆q的作用å¯ä»¥è¢« HISTIGNORE
替代。多行的組åˆå‘½ä»¤çš„ç¬¬äºŒå’Œå…¶é¤˜è¡Œéƒ½ä¸æœƒè¢«æª¢æ¸¬ï¼Œä¸ç®¡ HISTCONTROL
æ˜¯ä»€éº¼ï¼Œéƒ½æœƒåŠ å…¥åˆ°æ·å²ä¸ã€‚
HISTFILE
ä¿å˜å‘½ä»¤æ·å²çš„æª”å (åƒè¦‹ä¸‹æ‚¸ HISTORY v ç« ç¯€)。é è¨ïŸ¶O
~/.bash_historyã€‚å¦‚æžœå–æ¶ˆå®šç¾©ï¼Œåœ¨äº¤äº’å¼ shell 退出時
命令æ·å²å°‡ä¸æœƒä¿å˜ã€‚
HISTFILESIZE
æ·å²æª”案ä¸åŒ…å«çš„æœ€å¤§è¡Œæ•¸ã€‚當為這蚥僆q賦氶A如果需-
n的話,æ·å²æª”案將被截斷 來容ç´ä¸è¶…éŽé€™èš§çš„行。é è¨ïŸ¶O
500。æ·å²æª”æ¡ˆåœ¨äº¤äº’å¼ shell 退出時 也會被截斷到這蚧。
HISTIGNORE
一茷_號分隔的模å¼åˆ—表,用來判斷那-
茤R令行應當ä¿å˜åœ¨æ·å²åˆ—表ä¸ã€‚æ¯èšç‹¾ éƒ½å®šä½æ–¼è¡Œæ»¿Aå¿…é ˆåŒ¹é…æ•´è¡Œ
(沒有å‡å®šæ·»åŠ `*')。在 HISTCONTROL æŒ‡å®šçš„æ¸¬è©¦çµæŸå¾Œï¼Œé€™è£çš„æ¯-
èšç‹¾â—‹Ï„被測試。除了弗`çš„ shell 模å¼åŒ¹é…å—符, `&' 匹é…上一-
èšžå²è¡Œã€‚`&' å¯ä»¥ä½¿ç”¨åæ–œæ§“ä¾†è½‰ç¾©ï¼›åæ–œæ§“在
嘗試匹é…之å‰å°‡è¢«åˆªé™¤ã€‚多行的組åˆå‘½ä»¤çš„第二行以åŠå¾ŒçºŒè¡Œéƒ½ä¸æœƒè¢«æ¸¬è©¦ï¼Œä¸ç®¡
HISTIGNORE æ˜¯ä»€éº¼ï¼Œéƒ½å°‡åŠ å…¥åˆ°æ·å²ä¸ã€‚
HISTSIZE
命令æ·å²ä¸ä¿å˜çš„æ·å²æ•¸é‡ (åƒè¦‹ä¸‹æ‚¸ HISTORY v ç« ç¯€)。é è¨ïŸ¶O
500。
HOME ç•¶å‰ä½¿ç”¨è€…的茪H目錄;內建命令 cd
çš„é è¨åƒæ•¸ã€‚在執行波浪線擴展時也用到這蚥僆q。
HOSTFILE
包å«ä¸€è‡ç’ã€M /etc/hosts 相åŒçš„æª”å,當 shell 需nè£œå…¨ä¸»æ©Ÿåæ™‚-
n讀å–它。shell é‹è¡ŒéŽç¨‹ä¸
å¯ä»¥æ”¹è®Šå¯èƒ½çš„主機å補全列表;改變之後下一次需n主機å補全時 bash
æœƒå°‡æ–°æª”æ¡ˆçš„å…§å®¹æ·»åŠ åˆ°èˆŠåˆ—è¡¨ä¸ã€‚如果定義了 HOSTFILE 但是沒有賦-
Abash å°‡å˜—è©¦è®€å– /etc/hosts
檔案來ç²å¾—å¯èƒ½çš„主機åè£œå…¨åˆ—è¡¨ã€‚ç•¶å–æ¶ˆ HOSTFILE
的定義時,主機å列表將清空。
IFS å…§éƒ¨å—æ®µåˆ†éš”符 Internal Field Separator
用來在擴展之後進行分詞,使用內部命令 read 將行劃分æˆè©žã€‚é è¨ïŸ¶O
``<space><tab><newline>''。
IGNOREEOF
æŽ§åˆ¶äº¤äº’å¼ shell 接å—到唯一一 EOF å—符時的行為。如果有定義,-
O需n在一行的開始連續輸入 EOF å—符,直到å¯ä»¥ä½¿ bash 退出的å—符-
èšïš±C如果這蚥僆qå˜åœ¨ï¼Œä½†æ˜¯ïŸ®ã„›O一èšïš¶r或者沒有賦Aé è¨ïŸ¶O 10。
å¦‚æžœè®Šé‡æ²’有定義, EOF æ¨™èªŒè‘—è¼¸å…¥çš„çµæŸã€‚
INPUTRC
readline 的啟動é…ç½®æª”æ¡ˆï¼Œè€Œä¸æ˜¯é è¨çš„ ~/.inputrc (åƒè¦‹ä¸‹æ‚¸
READLINE ç« ç¯€)。
LANG 用來決定沒有特地用 LC_ è®Šé‡æŒ‡å®šçš„èªžè¨€ç’°å¢ƒé …ã€‚
LC_ALL 這蚥僆q超越了 LANG å’Œæ‰€æœ‰å…¶ä»–æŒ‡å®šèªžè¨€ç’°å¢ƒé …çš„ LC_ 變é‡ã€‚
LC_COLLATE
這蚥僆qæ±ºå®šäº†ç‚ºè·¯å¾‘æ“´å±•çš„çµæžœæŽ’åºæ™‚çš„å—æ¯é †åºï¼Œæ±ºå®šäº†-
Såœè¡¨é”å¼çš„行為, ç‰åƒ¹é¡žï¼Œå’Œè·¯å¾‘擴展ä¸çš„æ¸ä¸¦é †åºä»¥åŠæ¨¡å¼åŒ¹é…。
LC_CTYPE
這蚥僆q決定了å—ç¬¦çš„è§£é‡‹å’Œè·¯å¾‘æ“´å±•ä»¥åŠæ¨¡å¼åŒ¹é…ä¸å—符類的行為。
LC_MESSAGES
這蚥僆q決定了翻è¯ä»¥ $ å‰å°Žçš„雙引號å—符串時的語言環境。
LC_NUMERIC
這蚥僆qæ±ºå®šäº†æ ¼å¼åŒ–æ•¸å—æ™‚的語言環境分類。
LINES 內建命令 select ç”¨å®ƒä¾†åˆ¤æ–·è¼¸å‡ºé¸æ“‡åˆ—表時的列寬度。在收到 SIG-
WINCH 信號時自動è¨ç½®ã€‚
MAIL å¦‚æžœé€™èŒæŠï›ƒ]置為一蚗犰W,並且沒有è¨ç½®ç’°å¢ƒè®Šé‡ MAILPATH 的話,
bash 將在這蚗仵蚺仇q知使用者有郵件到é”。
MAILCHECK
指定 bash æª¢æŸ¥éƒµä»¶çš„é »çŽ‡æ˜¯å¤šå°‘ï¼Œä»¥ç§’ç‚ºå–®ä½ã€‚é è¨ïŸ¶O 60 秒。需-
n檢查郵件的時唌Ashell 在顯示æç¤ºç¬¦ä¹‹å‰å°‡é€²è¡Œæª¢æŸ¥ã€‚
å¦‚æžœå–æ¶ˆå®ƒçš„定義,或者è¨ç½®ç‚ºä¸¦éžå¤§æ–¼ç‰æ–¼é›¶çš„æ•¸ïŸ«Ashell
å°‡ç¦æ¢éƒµä»¶æª¢æŸ¥ã€‚
MAILPATH
一茷_號分隔的檔ååˆ—è¡¨ï¼Œå¾žä¸æª¢æŸ¥éƒµä»¶ã€‚ç•¶éƒµä»¶åˆ°é”æŸ-
è…Sæ®Šæª”æ¡ˆä¸æ™‚,輸出的特定消æ¯å¯ä»¥ 通éŽå°‡æª”å與消æ¯ä»¥ `?'
分隔來指定。 在消æ¯çš„æ–‡æœ¬ä¸ï¼Œ$_ 擴展為當å‰éƒµä»¶æª”案的檔å。例如:
MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has
mail!"'
Bash 為這蚥僆qæä¾›é è¨-
A但是它使用的使用者郵件檔案的ä½ç½®æ˜¯ç³»çµ±ç›¸é—œçš„
(例如,/var/mail/$USER)。
OPTERR 如果è¨ç½®ç‚º 1, bash 顯示內建命令 getopts ç”¢ç”Ÿçš„éŒ¯èª¤æ¶ˆæ¯ (åƒè¦‹ä¸‹-
悸 shell O(SHELL BUILTIN COMMANDS) ç« ç¯€)ã€‚æ¯æ¬¡ shell
啟動時或者一 shell 稿本被執行時 OPTERR 被åˆå§‹åŒ–為 1。
PATH æœç´¢å‘½ä»¤çš„路徑。它是一茷_號分割的目錄列表,shell å¾žä¸æœç´¢å‘½ä»¤
(åƒè¦‹ä¸‹æ‚¸ (COMMAND EXECUTION)
段è½)。é è¨çš„è·¯å¾‘æ˜¯ç³»çµ±ç›¸é—œçš„ï¼Œæ˜¯ç”±å®‰è£ bash 的系統管ç†-
è¨ç½®çš„。通常它的O
``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.''。
POSIXLY_CORRECT
如果 bash å•Ÿå‹•ç’°å¢ƒä¸æœ‰é€™èš¥åƒ†q,它將在讀å–啟動é…置檔案之å‰é€²å…¥
posix modeï¼Œå°±å¥½åƒæä¾›äº† --posix å•Ÿå‹•åƒæ•¸ä¸€æ¨£ã€‚如果 shell
é‹è¡ŒéŽç¨‹ä¸è¨ç½®äº†å®ƒï¼Œbash 就啟用 posix mode,就好åƒåŸ·è¡Œäº† set -o
posix 命令一樣。
PROMPT_COMMAND
如果有定義,它的N作為一茤Rä»¤ï¼Œæ¯æ¬¡é¡¯ç¤ºä¸»æç¤ºç¬¦ä¹‹å‰éƒ½æœƒåŸ·è¡Œã€‚
PS1 é€™èŒæŠïšºç˜“被擴展 (åƒè¦‹ä¸‹æ‚¸ PROMPTING 符
段è½),用作主æç¤ºç¬¦å—符串。é è¨ïŸ¶O ``\s-\v\$ ''。
PS2 é€™èŒæŠïšºç˜“åŒ PS1 一起被擴展,用作次æç¤ºç¬¦å—符串。é è¨ïŸ¶O ``>
''。
PS3 é€™èŒæŠïšºç˜“被用作內建命令 select çš„æç¤ºç¬¦ (åƒè¦‹ä¸Šæ‚¸ SHELL GRAM-
MAR k ç« ç¯€)。
PS4 é€™èŒæŠïšºç˜“åŒ PS1 一起被擴展,在執行跟蹤ä¸åœ¨ bash 顯示æ¯-
茤R令之å‰é¡¯ç¤ºã€‚需n的話, PS4 的第一茼r符會被複製多次,來指示
indirection 的層數。é è¨ïŸ¶O ``+ ''。
TIMEFORMAT
在å‰ç¶´ time ä¿ç•™å—的管é“ä¸ï¼Œé€™èŒæŠïšºç˜“ç”¨ä½œæ ¼å¼å—符串, 指定-
p時信æ¯å¦‚何顯示。å—符 % 引入的轉義åºåˆ—,被擴展為時間
或其他信æ¯ã€‚轉義åºåˆ—å’Œå®ƒæ€æ¼£tç¾©å¦‚ä¸‹æ‰€ç¤ºï¼›æ‹¬è™Ÿä¸æ˜¯å¯é¸çš„æˆåˆ†ã€‚
%% 一茼r惜W的 %。
%[p][l]R ç¶“æ·çš„æ™‚間,以秒p算。
%[p][l]U CPU 在使用者模å¼ä¸‹åŸ·è¡Œçš„秒數。
%[p][l]S CPU 在系統模å¼ä¸‹åŸ·è¡Œçš„秒數。
%P CPU 使用率,算法是 (%U + %S) / %R。
å¯é¸çš„ p 是指定精度 (å°æ•¸é»žå¾Œæ•¸å—使•¸) 的數C 如果是 0
å°±ä¸è¼¸å‡ºå°æ•¸é»žæˆ–å°æ•¸ïŸ«Cæœ€å¤šæŒ‡å®šåˆ°å°æ•¸é»žå¾Œä¸‰ä½ï¼› 如果 p 大於 3
就會被改為 3。如果沒有指定 p,é è¨ä½¿ç”¨ 3。
å¯é¸çš„ l æŒ‡å®šäº†é•·æ ¼å¼ï¼ŒåŒ…å«åˆ†é˜ï¼Œæ ¼å¼æ˜¯ MMmSS.FFs。 p çš„-
Må®šäº†æ˜¯ä¸æ˜¯åŒ…å«å°æ•¸ä½ã€‚
如果沒有è¨ç½®é€™èš§ï¼Œbash å‡å®šå®ƒçš„O
$'\nreal\t%3lR\nuser\t%3lU\nsys%3lS'。 如果它是空A就䏿œƒé¡¯ç¤º-
p時信æ¯ã€‚é¡¯ç¤ºæ ¼å¼å—符串的時唌AæœƒåŠ ä¸Š 一茷e導的新行符。
TMOUT 如果è¨ç½®ç‚ºå¤§æ–¼ 0 的ATMOUT 被當作內建命令 read çš„é è¨è¶…時
ç‰å¾…時間。如果ç‰å¾…終端輸入時, TMOUT 秒之後ä»ç„¶æ²’有輸入, select
命令將終æ¢ã€‚在交互的 shell ä¸ï¼Œå®ƒçš„Q解釋為顯示了
主æç¤ºç¬¦ä¹‹å¾Œç‰å¾…輸入的秒數。如果經éŽé€™èŒ¯ç¯²ïš´å¦¨å¶€æ–¯M沒有輸入,
Bash 將退出。
auto_resume
這蚥僆q控制了 shell å¦‚ä½•èˆ‡ä½¿ç”¨è€…å’Œä½œæ¥æŽ§åˆ¶äº¤äº’ã€‚å¦‚æžœè¨ç½®äº†é€™-
蚥僆q, 一茪ㄔ]å«å’¿wå‘的單-
茧的簡單命令,將作為æ¢å¾©è¢«ä¸æ–·çš„作æ¥çš„æŒ‡ç¤ºã€‚
ä¸å…è¨±å‡ºç¾æ¨¡æ£±å…©å¯çš„æƒ…æ³ï¼›å¦‚果有多è@æ¥éƒ½ä»¥é€™-
茧起始,將æ¢å¾©æœ€è¿‘é‹è¡Œ 的作æ¥ã€‚åœ¨é€™ç¨®æƒ…å½¢ä¸‹ï¼Œè¢«ä¸æ–·çš„作æ¥çš„
name 是用於啟動它的命令行。如果]置為 exact A
給出的å—ç¬¦ä¸²å¿…é ˆç²¾ç¢ºåŒ¹é…è¢«ä¸æ–·çš„作æ¥å;如果è¨ç½®ç‚º substring,
給出的å—符串需n匹é…è¢«ä¸æ–·çš„作æ¥åçš„å串。 substring
çš„åŠŸèƒ½èˆ‡ä½œæ¥æ¨™è˜ç¬¦ %? 功能類似 (åƒè¦‹ä¸‹æ‚¸ JOB CONTROL 制
ç« ç¯€)。如果è¨ç½®ç‚ºä»»ä½•å…¶ä»–-
A給出的å—ç¬¦ä¸²å¿…é ˆæ˜¯è¢«ä¸æ–·çš„作æ¥çš„å‰ç¶´ï¼› 這樣åšèˆ‡ä½œæ¥æ¨™è˜ç¬¦ %
功能類似。
histchars
兩到三茼r符,控制著æ·å²æ“´å±•和分段 (tokenization,åƒè¦‹ä¸‹æ‚¸ HIS-
TORY EXPANSION i ç« ç¯€)。第一茼r符是 history expan-
sion(æ·å²æ“´å±•) å—符, 這茼r符表明了æ·å²æ“´å±•的開始,通常是 `!'。
第二茼r符是 quick substitution(快速替æ›) å—符, 它是-
å¥sé‹è¡Œä¸Šæ¬¡è¼¸å…¥çš„命令,但將命令ä¸çš„å—符串替æ›ç‚ºå¦ä¸€èŒ 甄票g,
é è¨æ˜¯ `^'。å¯é¸çš„第三茼r符是指示如果作為一茧的開始,那麼
一行ä¸å‰©é¤˜å—符是注釋。通常這茼r符是 `#'。æ·å²æ³¨é‡‹å—符使得
å°ä¸€è¡Œä¸å‰©é¤˜å—符在æ·å²æ›¿æ›ä¸è¢«è·³éŽã€‚它ä¸ä¸€å®šä½¿ shell 解釋器將
這一行的剩餘部分當作注釋。
Arrays
Bash æä¾›äº†ä¸€ç¶æ•¸çµ„變é‡ã€‚任何變é‡éƒ½å¯ä»¥ä½œç‚ºä¸€èšï›‚æ¸F內建命令 declare
å¯ä»¥é¡¯å¼åœ°å®šç¾©æ•¸çµ„ã€‚æ•¸çµ„çš„å¤§å°æ²’æœ‰ä¸Šï¼Œä¹Ÿæ²’æœ‰åˆ¶åœ¨é€£çºŒå°æˆå¼•用和 賦-
犰酗åµçŠ¥æ±‚ã€‚æ•¸çµ„ä»¥æ•´æ•¸ç‚ºä¸‹æ¨™ï¼Œå¾ž 0 開始。
如果變é‡è³¦ïŸ¸ç¦¸æ´å¼‡y法 name[subscript]=value, 那麼就會自動創建數組。
subscript 被當作一蚨滼N表é”å¼ï¼Œçµæžœå¿…é ˆæ˜¯å¤§æ–¼ç‰æ–¼ 0 的Cn顯å¼åœ°å®šç¾©ä¸€-
èšï›‚æ¸A使用 declare -a name (åƒè¦‹ä¸‹æ‚¸ shell O(SHELL BUILTIN
COMMANDS) ç« ç¯€)。也å¯ä»¥ç”¨ declare -a name[subscript] 這時 subscript
被忽略。數組變é‡çš„屬性å¯ä»¥ç”¨å…§å»ºå‘½ä»¤ declare å’Œ readonly 來指定。æ¯-
èš…æ£å¦é´é¡ç‹¾é ƒï›‚掑葛應ㄕ陵纂C
數組賦i以使用復åˆè³¦ïŸ´æ¼±é–¬ï¹›A形弿˜¯ name=(value1 ... valuen)ï¼Œé€™è£æ¯
value 的形å¼éƒ½æ˜¯ [subscript]=string。string
å¿…é ˆå‡ºç¾ã€‚如果出ç¾äº†å¯é¸çš„æ‹¬è™Ÿå’Œä¸‹æ¨™ï¼Œå°‡ç‚ºé€™èŒªU標賦Aå¦å‰‡ 被賦-
漱葛尷漱U標是語å¥ä¸ä¸Šä¸€æ¬¡è³¦ïŸ´æ¼±Uæ¨™åŠ ä¸€ã€‚ä¸‹æ¨™å¾ž 0 開始。 這-
èš–y法也被內建命令 declare 所接å—。單ç¨çš„æ•¸çµ„å…ƒç´ å¯ä»¥ç”¨ä¸Šæƒœé›¯è¡ç„y法
name[subscript]=value 來賦C
æ•¸çµ„çš„ä»»ä½•å…ƒç´ éƒ½å¯ä»¥ç”¨ ${name[subscript]} 來引用。
èŠ±æ‹¬è™Ÿæ˜¯å¿…é ˆçš„ï¼Œä»¥é¿å…和路徑擴展沖çªã€‚如果 subscript 是 @ 或是
*,它擴展為 name 的所有æˆã€‚
é€™å…©ç¨®ä¸‹æ¨™åªæœ‰åœ¨é›™å¼•è™Ÿä¸æ‰ä¸åŒã€‚在雙引號ä¸ï¼Œ${name[*]} 擴展為一茧,
由所有數組æˆçš„æ°èŠ‹Aç”¨ç‰¹æ®Šè®Šé‡ IFS 的第一茼r符分隔;${name[@]} å°‡
name çš„æ¯èŒ¼å”擴展為一茧。 如果數組沒有æˆï¼Œ${name[@]}
擴展為空串。這種ä¸åŒé¡žä¼¼æ–¼ç‰¹æ®Šåƒæ•¸ * å’Œ @ 的擴展 (åƒè¦‹ä¸Šæ‚¸ Special
Parameters 段è½)。${#name[subscript]} 擴展為 ${name[subscript]}
的長度。如果 subscript 是 * 或者是 @ï¼Œæ“´å±•çµæžœæ˜¯æ•¸çµ„ä¸å…ƒç´ çš„-
èšïš±C引用沒有下標數組變é‡ç‰åƒ¹æ–¼ å¼•ç”¨å…ƒç´ 0。
內建命令 unset 用於銷毀數組。unset name[subscript] 將銷毀下標是 sub-
script çš„å…ƒç´ ã€‚ unset name, é€™è£ name 是一èšï›‚æ¸A或者 unset name[sub-
script], é€™è£ subscript 是 * 或者是 @,將銷毀整èšï›‚æ¸C
內建命令 declare, local, å’Œ readonly éƒ½èƒ½æŽ¥å— -a é¸é …,從而指定一-
èšï›‚æ¸C內建命令 read å¯ä»¥æŽ¥å— -a é¸é …,從標準輸入讀入一列詞來為數組賦-
C內建命令 set å’Œ declare 使用一種å¯ä»¥å’±å³Žå€æ“—Jçš„æ ¼å¼ä¾†é¡¯ç¤ºæ•¸çµ„å…ƒç´ ã€‚
i(EXPANSION)
命令行的擴展是在拆分æˆè©žä¹‹å¾Œé€²è¡Œçš„。有七種類型的擴展: brace expan-
sion(花括號擴展), tilde expansion(波浪線擴展), parameter and variable
expansion(åƒæ•¸å’Œè®Šé‡æ“´å±•), command substitution(命令替æ›), arithmetic
expansion(算術擴展), word splitting(詞的拆分), 和 pathname expan-
sion(路徑擴展).
æ“´å±•çš„é †åºæ˜¯ï¼šbrace expansion, tilde expansion, parameter, variable å’Œ
arithmetic expansion 還有 command substitution (按照從左到å³çš„é †åº),
word splitting, 最後是 pathname expansion.
é‚„æœ‰ä¸€ç¨®é™„åŠ çš„æ“´å±•ï¼šprocess subtitution (進程替æ›) åªæœ‰åœ¨æ”¯æŒå®ƒ
çš„ç³»çµ±ä¸æœ‰æ•ˆã€‚
åªæœ‰ brace expansion, word splitting, å’Œ pathname expansion
在擴展å‰å¾Œçš„詞數會發生改變;其他擴展總是將一茧擴展為一茧。
唯一的例外是上探ㄗ鴘 "$@" å’Œ "${name[@]}" (åƒè¦‹ PARAMETERSåƒæ•¸)。
Brace Expansion
Brace expansion 是一種å¯èƒ½ç”¢ç”Ÿä»»æ„å—符串的機制。這種機制類似於 pathname
expansion, 但是並ä¸éœ€nå˜åœ¨ç›¸æ‡‰çš„æª”案。 èŠ±æ‹¬è™Ÿæ“´å±•çš„æ¨¡å¼æ˜¯ä¸€èŒˆié¸çš„
preamble(å‰å°Žå—符), 後掘繺è‘@系列逗號分隔的å—符串,包å«åœ¨ä¸€å°èŠ±æ‹¬è™Ÿä¸ï¼Œ
å†å¾Œæƒ‡O一茈ié¸çš„ postscript(附言)。 å‰å°Žè¢«æ·»åŠ åˆ°èŠ±æ‹¬è™Ÿä¸çš„æ¯èŒ¼r符串å‰-
情Aé™„è¨€è¢«é™„åŠ åˆ°æ¯èŒ§ç—•Gå—符串之後, 從左到å³é€²è¡Œæ“´å±•。
花括號擴展å¯ä»¥åµŒå¥—。擴展å—ç¬¦ä¸²çš„çµæžœæ²’有排åºï¼›è€Œæ˜¯ä¿ç•™äº†å¾žå·¦åˆ°å³çš„é †åºã€‚
例如, a{d,c,b}e 擴展為 `ade ace abe'。
花括號擴展是在任何其他擴展之å‰é€²è¡Œçš„,任何å°å…¶ä»–擴展有特殊æ„義的å—符
都ä¿ç•™åœ¨çµæžœä¸ã€‚å®ƒæ˜¯åš´æ ¼å—æƒœW的。 Bash
䏿œƒå°æ“´å±•的上下文或花括號ä¸çš„æ–‡æœ¬åšä»»ä½•語義上的解釋。
æ£ç¢ºçš„èŠ±æ‹¬è™Ÿæ“´å±•å¿…é ˆåŒ…å«æ²’æœ‰å¼•ç”¨çš„å·¦æ‹¬è™Ÿå’Œå³æ‹¬è™Ÿï¼Œä»¥åŠè‡³å°‘一茖S有
å¼•ç”¨çš„é€—è™Ÿã€‚ä»»ä½•ä¸æ£ç¢ºçš„表é”å¼éƒ½ä¸æœƒè¢«æ”¹è®Šã€‚å¯ä»¥ç”¨å斜槓來引用 { 或 ,
來阻æ¢å°‡å®ƒæ–»æ‚O為花括號表é”å¼çš„一部分。 為了é¿å…èˆ‡åƒæ•¸æ“´å±•æ²–çªï¼Œå—符串
${ ä¸è¢«èªç‚ºæœ‰æ•ˆçš„組åˆã€‚
é€™ç¨®çµæ§‹é€šå¸¸ç”¨ä¾†ç°¡å¯«å—符串的公共å‰ç¶´é 比上例ä¸ç‚ºé•·çš„æƒ…æ³ï¼Œä¾‹å¦‚:
mkdir /usr/local/src/bash/{old,new,dist,bugs}
或者:
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
花括號擴展導P了與æ·å²ç‰ˆæœ¬çš„ sh
的一點ä¸ç›¸å®¹ã€‚åœ¨å·¦æ‹¬è™Ÿæˆ–å³æ‹¬è™Ÿä½œç‚ºè©žçš„ä¸€éƒ¨åˆ†å‡ºç¾æ™‚, sh 䏿œƒå°å®ƒ-
抾i行特殊處ç†ï¼Œæœƒåœ¨è¼¸å‡ºä¸ä¿ç•™å®ƒæ€´C Bash
å°‡æ‹¬è™Ÿå¾žèŠ±æ‹¬è™Ÿæ“´å±•çµæžœçš„詞ä¸åˆªé™¤ã€‚ä¾‹å¦‚ï¼Œå‘ sh 輸入 file{1,2} 會導-
Pä¸è®Šçš„è¼¸å‡ºã€‚åŒæ¨£çš„輸入在 bash 進行擴展之後,會輸出 file1 file2 .
如果需nåŒ sh åš´æ ¼åœ°ä¿æŒç›¸å®¹ï¼Œéœ€n在啟動 bash çš„æ™‚å”»æ´ +B é¸é …,或者使用
set å‘½ä»¤åŠ ä¸Š +B é¸é …來ç¦ç”¨èŠ±æ‹¬è™Ÿæ“´å±• (åƒè¦‹ä¸‹æ‚¸ shell O(SHELL
BUILTIN COMMANDS) ç« ç¯€)。
Tilde Expansion
如果一茧以沒有引用的波浪線å—符 (`~') 開始,所有 在第一茖S有引用的斜線
(`/') 之å‰çš„å—符 (或者是這茧的所有å—符, 如果沒有沒引用的斜線的話)
都被èªç‚ºæ˜¯ tilde-prefix(波浪線å‰ç¶´)。 如果 tilde-prefix
䏿²’有被引用的å—符,那麼波浪線之後的å—符串 被èªç‚ºæ˜¯ login
name(登入å)ã€‚å¦‚æžœç™»å…¥åæ˜¯ç©ºå—符串,波浪線將 被替æ›ç‚º shell åƒæ•¸ HOME
的C如果沒有定義 HOM A 將替æ›ç‚ºåŸ·è¡Œæ¤ shell 的使用者的-
茪H目錄。å¦å‰‡ï¼Œtilde-prefix 被替æ›ç‚º 與指定登入å相è¯ç³»çš„茪H目錄。
如果 tilde-prefix 是 `~+',將使用 shell è®Šé‡ PWD çš„ïŸ²è‹æ‡‚å“„C如果 tilde-
prefix 是 `~-',並且è¨ç½®äº† shell è®Šé‡ OLDPWD, 將使用這蚥僆q-
ïŸ²è‹æ‡‚å“„C如果在 tilde-prefix ä¸ï¼Œæ³¢æµªç·šä¹‹å¾Œçš„å—符串 由一èšïš¶r N
組æˆï¼Œå‰ç¶´å¯é¸çš„ `+' 或者 `-',那麼 tilde-prefix
將被替æ›ç‚ºç›®éŒ„棧ä¸ç›¸æ‡‰çš„å…ƒç´ ï¼Œå°±æ˜¯å°‡ tilde-prefix ä½œç‚ºåƒæ•¸åŸ·è¡Œå…§å»ºå‘½ä»¤
dirs é¡¯ç¤ºçš„çµæžœã€‚如果 tilde-prefix 䏿³¢æµªç·šä¹‹å¾Œçš„å—符是一-
èšïš¶r,沒有å‰ç¶´ï¼Œ 那麼就å‡å®šæœ‰ä¸€ `+'。
如果登入åä¸åˆæ³•ï¼Œæˆ–è€…æ³¢æµªç·šæ“´å±•å¤±æ•—ï¼Œé€™èŒ§å°‡ä¸æœƒè®ŠåŒ–。
在變é‡è³¦ïŸ®ä¸‘Aå°æ–¼ : 或 = 之後的å—ç¬¦ä¸²æœƒç«‹å³æª¢æŸ¥æœªå¼•用的 tilde-prefix。
這種情æ³ä¸‹ï¼Œä»ç„¶æœƒé€²è¡Œæ³¢æµªç·šæ“´å±•ã€‚å› æ¤ï¼Œå¯ä»¥ä½¿ç”¨å¸¶æ³¢æµªç·šçš„æª”å來為
PATH, MAILPATH, 和 CDPATH 賦Ashell 將賦予擴展之後的C
Parameter Expansion
å—符 `$' å¼•å…¥äº†åƒæ•¸æ“´å±•,命令替æ›å’Œç®—術擴展。næ“´å±•çš„åƒæ•¸å或符號
å¯èƒ½åŒ…å«åœ¨èŠ±æ‹¬è™Ÿä¸ï¼ŒèŠ±æ‹¬è™Ÿå¯é¸çš„,但是å¯ä»¥ä½¿å¾—n擴展的變é‡ä¸æœƒèˆ‡ç·Šéš¨å…¶å¾Œ
çš„å—符åˆä¸¦ï¼Œæˆç‚ºæ–°çš„å稱。
使用花括號的時唌A匹é…çš„å³æ‹¬è™Ÿæ˜¯ç¬¬ä¸€ `}'ï¼Œä¸¦ä¸”å®ƒæ²’æœ‰è¢«åæ–œæ§“引用
或包å«åœ¨ä¸€èŒªçŠå³ˆæ¼²r符串ä¸ï¼Œä¹Ÿæ²’有包å«åœ¨ä¸€è‹O入的算術擴展,命令替æ›
æˆ–æ˜¯åƒæ•¸æ“´å±•ä¸ã€‚
${parameter}
被替æ›ç‚º parameter 的C如果 parameter 是一-
茼鼽måƒæ•¸ï¼Œä¸¦ä¸”數å—å¤šæ–¼ä¸€ä½æ™‚;或者當緊隨 parameter
之後有ä¸å±¬æ–¼å稱一部分的å—ç¬¦æ™‚ï¼Œéƒ½å¿…é ˆåŠ ä¸ŠèŠ±æ‹¬è™Ÿã€‚
如果 parameter 的第一茼r符是一虓P嘆號,將引進一層間接變é‡ã€‚ bash 使用以
parameter 的其餘部分為å的變é‡çš„@為變é‡çš„å稱;
接下來新的變é‡è¢«æ“´å±•,它的峖b隨後的替æ›ç•¶ä¸ï¼Œè€Œä¸æ˜¯ä½¿ç”¨ parameter
自赤瘓。這也稱為 indirect expansion(間接擴展). ä¾‹å¤–æƒ…æ³æ˜¯ä¸‹æŽ„ç¸é´˜
${!prefix*}。
下悸漕C種情æ³ä¸ï¼Œword 都nç¶“éŽæ³¢æµªç·šæ“´å±•ï¼Œåƒæ•¸æ“´å±•,命令替æ›å’Œ
算術擴展。如果ä¸é€²è¡Œåå—符串擴展,bash 測試一茖S有定義或高讀
åƒæ•¸ï¼›å¿½ç•¥å†’è™Ÿçš„çµæžœæ˜¯åªæ¸¬è©¦æœªå®šç¾©çš„åƒæ•¸ã€‚
${parameter:-word}
Use Default Values(使用é è¨)。如果 parameter 未定義或-
高禳A將替æ›ç‚º word 的擴展。å¦å‰‡ï¼Œå°‡æ›¿æ›ç‚º parameter 的C
${parameter:=word}
Assign Default Values(賦é è¨)。如果 parameter 未定義或高禳A
word 的擴展將賦予 parameter. parameter 的-
N被替æ›ã€‚ä½ç½®åƒæ•¸å’Œç‰¹æ®Šåƒæ•¸ä¸èƒ½ç”¨é€™ç¨®æ–¹å¼è³¦ïŸ«C
${parameter:?word}
Display Error if Null or Unset(顯示錯誤,如果未定義或-
高)。如果 parameter 未定義或高禳Aword (或一æ¢ä¿¡æ¯ï¼Œå¦‚æžœ
word ä¸å˜åœ¨) 的擴展將寫入到標準錯誤;shell
å¦‚æžœä¸æ˜¯äº¤äº’的,則將退出。å¦å‰‡ï¼Œ parameter 的N被替æ›ã€‚
${parameter:+word}
Use Alternate Value(使用å¯é¸)。如果 parameter
未定義或éžç©ºï¼Œä¸æœƒé€²è¡Œæ›¿æ›ï¼›å¦å‰‡å°‡æ›¿æ›ç‚º word 擴展後的C
${parameter:offset}
${parameter:offset:length}
Substring Expansion(åå—符串擴展)。 擴展為parameter 的最多
length 茼r符,從 offset 指定的å—符開始。如果忽略了
length,擴展為 parameter çš„åå—符串, 從 offset
指定的å—符串開始。length å’Œ offset 是算術表é”å¼ (åƒè¦‹ä¸‹æ‚¸
ARITHMETIC EVALUATION D段è½)。 length å¿…é ˆæ˜¯ä¸€èŒªjæ–¼ç‰æ–¼ 0
的數C如果 offset 求痕Gå°æ–¼ 0, N當作從 parameter çš„-
漸膚擎滶_çš„åç§»é‡ã€‚如果 parameter 是 @ï¼Œçµæžœæ˜¯ length
茼鼽måƒæ•¸ï¼Œå¾ž offset 開始。 如果 parameter 是一èšï›‚æ°W,以 @ 或
* ç´¢å¼•ï¼Œçµæžœæ˜¯æ•¸çµ„çš„ length 茼å”,從 ${parameter[offset]} 開始。
åå—符串的下標是從 0 開始的,除éžä½¿ç”¨ä½ç½®åƒæ•¸æ™‚,下標從 1 開始。
${!prefix*}
擴展為å稱以 prefix 開始的變é‡åï¼Œä»¥ç‰¹æ®Šè®Šé‡ IFS 的第一-
茼r符分隔。
${#parameter}
替æ›ç‚º parameter 的漯曮 (å—符數目)。如果 parameter 是 *
或者是 @, 替æ›çš„Oä½ç½®åƒæ•¸çš„èšïš±C如果 parameter 是一-
èšï›‚æ°W,下標是 * 或者是 @, 替æ›çš„O數組ä¸å…ƒç´ çš„èšïš±C
${parameter#word}
${parameter##word}
word 被擴展為一èšç‹¾ï¹›Aå°±åƒè·¯å¾‘擴展ä¸ä¸€æ¨£ã€‚如果這èšç‹¾ï¹žït param-
eter 的滌_å§‹ï¼Œé‚£éº¼æ“´å±•çš„çµæžœæ˜¯å°‡ parameter 擴展後的-
丑A最çŸçš„åŒ¹é… (``#'' 的情æ³) æˆ–è€…æœ€é•·çš„åŒ¹é… (``##''的情æ³)
åˆªé™¤çš„çµæžœã€‚如果 parameter 是 @ 或者是 *,
則模å¼åˆªé™¤æ“ä½œå°‡ä¾æ¬¡æ–½ç”¨æ–¼æ¯-
茼鼽måƒæ•¸ï¼Œæœ€å¾Œæ“´å±•ç‚ºçµæžœçš„列表。如果 parameter 是一-
èšï›‚桲僆q,下標是 @ 或者是 *, 模å¼åˆªé™¤å°‡ä¾æ¬¡æ–½ç”¨æ–¼æ•¸çµ„ä¸çš„æ¯èŒ¼-
ï¼Œæœ€å¾Œæ“´å±•ç‚ºçµæžœçš„列表。
${parameter%word}
${parameter%%word}
word 被擴展為一èšç‹¾ï¹›Aå°±åƒè·¯å¾‘擴展ä¸ä¸€æ¨£ã€‚如果這èšç‹¾ï¹žït param-
eter 擴展後的漣應﹛Aé‚£éº¼æ“´å±•çš„çµæžœæ˜¯å°‡ parameter 擴展後的-
丑A最çŸçš„åŒ¹é… (``%'' 的情æ³) æˆ–è€…æœ€é•·çš„åŒ¹é… (``%%''的情æ³)
åˆªé™¤çš„çµæžœã€‚如果 parameter 是 @ 或者是 *,
則模å¼åˆªé™¤æ“ä½œå°‡ä¾æ¬¡æ–½ç”¨æ–¼æ¯-
茼鼽måƒæ•¸ï¼Œæœ€å¾Œæ“´å±•ç‚ºçµæžœçš„列表。如果 parameter 是一-
èšï›‚桲僆q,下標是 @ 或者是 *, 模å¼åˆªé™¤å°‡ä¾æ¬¡æ–½ç”¨æ–¼æ•¸çµ„ä¸çš„æ¯èŒ¼-
ï¼Œæœ€å¾Œæ“´å±•ç‚ºçµæžœçš„列表。
${parameter/pattern/string}
${parameter//pattern/string}
patterm 被擴展為一èšç‹¾ï¹›Aå°±åƒè·¯å¾‘擴展ä¸ä¸€æ¨£ã€‚parameter
è¢«æ“´å±•ï¼Œå…¶ïŸ®ä»‡æ€æ›æ¼±ït pattern 的內容被替æ›ç‚º string。
在第一種形å¼ä¸ï¼Œåªæœ‰ç¬¬ä¸€èŒªït被替æ›ã€‚第二種形å¼ä½¿å¾— pattern
䏿‰€æœ‰åŒ¹é…都被替æ›ç‚º string。 如果 pattern 以 # é–‹å§‹ï¼Œå®ƒå¿…é ˆåŒ¹é…
parameter 擴展後 犖部。如果 pattern 以 % é–‹å§‹ï¼Œå®ƒå¿…é ˆåŒ¹é…
parameter 擴展後漣應﹛C如果 string 是空Apattern
的匹é…都將被刪除, pattern 之後的 / 將被忽略。如果 parameter 是
@ 或者是 *, å‰‡æ›¿æ›æ“ä½œå°‡ä¾æ¬¡æ–½ç”¨æ–¼æ¯-
茼鼽måƒæ•¸ï¼Œæœ€å¾Œæ“´å±•ç‚ºçµæžœçš„列表。如果 parameter 是一-
èšï›‚桲僆q,下標是 @ 或者是 *, 模å¼åˆªé™¤å°‡ä¾æ¬¡æ–½ç”¨æ–¼æ•¸çµ„ä¸çš„æ¯èŒ¼-
ï¼Œæœ€å¾Œæ“´å±•ç‚ºçµæžœçš„列表。
Command Substitution
å‘½ä»¤æ›¿æ› (Command substitution) å…許以命令的輸出替æ›å‘½ä»¤å。有
兩種形å¼ï¼š
$(command)
還有
`command`
Bash 進行擴展的æ¥é©Ÿæ˜¯åŸ·è¡Œ com-
mand,以它的標準輸出替æ›å®ƒï¼Œä¸¦ä¸”將所有後續的
æ–°è¡Œç¬¦åˆªé™¤ã€‚å…§åµŒçš„æ–°è¡Œç¬¦ä¸æœƒåˆªé™¤ï¼Œä½†æ˜¯å®ƒæ€ši能會在詞的拆分ä¸è¢«åˆªé™¤ã€‚
å‘½ä»¤æ›¿æ› $(cat file) å¯ä»¥ç”¨ç‰åƒ¹ä½†æ˜¯æ›´å¿«çš„æ–¹æ³• $(< file) 代替。
當使用舊å¼çš„å引號 ("``") 替æ›å½¢å¼æ™‚ï¼Œåæ–œæ§“åªæœ‰å…¶å—æ§Nç¾©ï¼Œé™¤éž å¾Œæƒ‡O
$, `, 或者是 \. 第一茷e惆Sæœ‰åæ–œæ§“çš„åå¼•è™Ÿå°‡çµæŸå‘½ä»¤æ›¿æ›ã€‚當使用
$(command) 形弿™‚ï¼Œæ‹¬è™Ÿä¸æ‰€æœ‰å—符組æˆäº†æ•´èŒ¤R令;沒有被特殊處ç†çš„å—符。
命令替æ›å¯ä»¥åµŒå¥—。n在使用åå¼•è™Ÿå½¢å¼æ™‚嵌套,å¯ä»¥ç”¨å斜槓來轉義內層的
å引號。
如果替æ›ç™¼ç”Ÿåœ¨é›™å¼•號之ä¸ï¼Œçµæžœå°‡ä¸é€²è¡Œè©žçš„æ‹†åˆ†å’Œè·¯å¾‘擴展。
Arithmetic Expansion
算術擴展å…許算術表é”å¼çš„æ±‚Mçµæžœçš„æ›¿æ›ã€‚ç®—è¡“æ“´å±•çš„æ ¼å¼æ˜¯ï¼š
$((expression))
表é”å¼ expression
被視為如åŒåœ¨é›™å¼•號之ä¸ä¸€æ¨£ï¼Œä½†æ˜¯æ‹¬è™Ÿä¸çš„é›™å¼•è™Ÿä¸æœƒè¢«ç‰¹æ®Šè™•ç†ã€‚
表é”å¼ä¸æ‰€æœ‰è©žéƒ½ç¶“éŽäº†åƒæ•¸æ“´å±•,å—符串擴展,命令替æ›å’Œå¼•用的刪除。
算術替æ›å¯ä»¥åµŒå¥—。
求ç…ç±U D (ARITHMETIC EVALUATION)
ç« ç¯€ä¸åˆ—出的è¦å‰‡é€²è¡Œã€‚如果表é”å¼ expression éžæ³•, bash
輸出錯誤æç¤ºæ¶ˆæ¯ï¼Œä¸æœƒé€²è¡Œæ›¿æ›ã€‚
Process Substitution
Process substitution (進程替æ›) åªæœ‰åœ¨æ”¯æŒå‘½åç®¡é“ (FIFOs),
或者支æŒä½¿ç”¨ /dev/fd æ–¹å¼ç‚ºæ‰“開的檔案命åçš„ç³»çµ±ä¸æ‰å¯ç”¨ã€‚ å®ƒçš„å½¢å¼æ˜¯
<(list) 或者是 >(list)。 進程 list é‹è¡Œæ™‚的輸入或輸出被連接到一 FIFO
或者 /dev/fd ä¸çš„æª”案。檔案的å稱作為一-
èŒæŠï›ƒQ傳éžåˆ°ç•¶å‰å‘½ä»¤ï¼Œä½œç‚ºæ“´å±•çš„çµæžœã€‚ 如果使用 >(list)
å½¢å¼ï¼Œå‘檔案寫入相當於為 list æä¾›è¼¸å…¥ã€‚如果使用 <(list)
å½¢å¼ï¼Œå¯ä»¥è®€ä½œç‚ºåƒæ•¸å‚³éž 的檔案來ç²å¾— list 的輸出。
如果å¯èƒ½çš„è©±ï¼Œé€²ç¨‹æ›¿æ›æ˜¯èˆ‡åƒæ•¸å’Œè®Šé‡æ“´å±•,命令替æ›å’Œç®—è¡“æ“´å±•åŒæ™‚發生的。
Word Splitting
shell 檢測ä¸åœ¨é›™å¼•號引用ä¸ç™¼ç”Ÿçš„åƒæ•¸æ“´å±•,命令替æ›å’Œç®—è¡“æ“´å±•çš„çµæžœï¼Œ
進行 word splitting(詞的拆分)。
shell å°‡ IFS çš„æ¯-
茼rç¬¦éƒ½ä½œç‚ºå®šç•Œç¬¦ï¼Œæ ¹æ“šé€™äº›å—ç¬¦ä¾†å°‡å…¶ä»–æ“´å±•çš„çµæžœåˆ†æˆè©žã€‚如果 IFS
沒有定義,或者它的Oé è¨çš„ <space><tab><newline>, 那麼 IFS
å—符的任何åºåˆ—都將作為分界之用。如果 IFS 的Oé è¨ä¹‹å¤–çš„-
A那麼詞開é å’Œçµå°¾çš„空白å—符 space å’Œ tab 都將被忽略,åªn空白å—符在
IFS 的å (å³ï¼Œ IFS 包å«ç©ºç™½å—符)。 任何在 IFS 之ä¸ä½†æ˜¯ä¸æ˜¯ IFS
空白的å—符,以åŠä»»ä½•相鄰的 IFS 空白å—ç¬¦ï¼Œå°‡å—æ®µåˆ†éš”開來。 IFS
空白å—符的åºåˆ—也被作為分界符。如果 IFS 的Oç©ºï¼Œä¸æœƒç™¼ç”Ÿè©žçš„æ‹†åˆ†ã€‚
顯å¼çµ¦å‡ºçš„ç©ºïŸºæŠ ("" 或 '') 將被ä¿ç•™ã€‚ éš±å«çš„空æŠïš±A來自於空-
滌æŠï›’X展,如果沒有引用則將被刪除。 如果空-
滌æŠïš¶bé›™å¼•è™Ÿå¼•ç”¨ä¸æ“´å±•ï¼Œçµæžœæ˜¯ç©ºïŸ´æ»ŒæŠïš±A將被ä¿ç•™ã€‚
注æ„å¦‚æžœæ²’æœ‰ç™¼ç”Ÿæ“´å±•ï¼Œä¸æœƒé€²è¡Œè©žçš„æ‹†åˆ†ã€‚
Pathname Expansion
詞的拆分之後,除éžè¨ç½®éŽ -f é¸é …, bash æœç´¢æ¯èŒ§ï¼Œå°‹æ‰¾å—符 *, ?, å’Œ [.
如果找到了其ä¸ä¹‹ä¸€ï¼Œé‚£éº¼é€™èŒ§è¢«ç•¶ä½œä¸€ pattern(模å¼), 被替æ›ç‚ºåŒ¹é…這-
èšç‹¾ã€žç‘°çаW以嗿¯é †åºæŽ’列的列表。如果沒有找到匹é…的檔å, 並且 shell
ç¦ç”¨äº† nullglob é¸é …,這茧將ä¸ç™¼ç”Ÿè®ŠåŒ–。如果è¨ç½®äº† nullglob
é¸é …並且沒有找到匹é…,這茧將被刪除。如果啟用了 nocaseglob
é¸é …ï¼ŒåŒ¹é…æ™‚å°‡ä¸è€ƒæ…®å—æ¯çš„大å°å¯«ã€‚當模å¼ç”¨ä½œè·¯å¾‘åæ“´å±•時,å—符 ``.''
如果在一茼W稱的開始或者緊隨一-
è“袟bä¹‹å¾Œï¼Œé‚£éº¼å®ƒå¿…é ˆè¢«é¡¯å¼åœ°åŒ¹é…,除éžè¨ç½®äº† dotglob shell
é¸é …。當匹é…一虒çº|åæ™‚ï¼Œæ–œæ§“ç¬¦å¿…é ˆè¢«é¡¯å¼åœ°åŒ¹é…。其他情æ³ä¸‹ï¼Œå—符 ``.''
䏿œƒè¢«ç‰¹æ®Šå°å¾…。åƒè¦‹ä¸‹æ‚¸ shell O(SHELL BUILTIN COMMANDS) ä¸å°
shopt çš„ä»‹ç´¹ï¼Œå…¶ä¸æœ‰ shell é¸é … nocaseglob, nullglob, å’Œ dotglob çš„æ-
z。
ç’°å¢ƒè®Šé‡ GLOBIGNORE å¯ä»¥ç”¨ä¾†åˆ¶åŒ¹é… pattern 的檔å集åˆã€‚如果è¨ç½®äº† GLO-
BIGNOR A æ¯èŒªït的檔åå¦‚æžœåŒ¹é… GLOBIGNORE ä¸ä»»ä½•一-
èšç‹¾ã€žçˆ¾äºƒN從匹é…的列表ä¸åˆªé™¤ã€‚檔å ``.'' å’Œ ``..''
總是被忽略,å³ä½¿è¨ç½®äº† GLOBIGNOR C 但是,è¨ç½® GLOBIGNORE 和啟用 shell
é¸é … dotglob 效果是相åŒçš„ï¼Œå› æ¤æ‰€æœ‰å…¶ä»–以 ``.'' é–‹é 的檔å將被匹é…。-
nå¾—åˆ°é´©èŒ æ¼²ç”ˆ (忽略所有以 ``.'' é–‹é 的檔å),å¯ä»¥å°‡ ``.*'' æ·»åŠ ç‚º
GLOBIGNORE 的模å¼ä¹‹ä¸€ã€‚é¸é … dotglob 被ç¦ç”¨ï¼Œå¦‚æžœ GLOBIGNORE
沒有定義時。
Pattern Matching
任何模å¼ä¸å‡ºç¾çš„å—符,除了下探yz的特殊模å¼å—符外,都匹é…它本芋C
模å¼ä¸ä¸èƒ½å‡ºç¾ NUL å—符。如果n匹é…å—æƒœW的特殊模å¼å—ç¬¦ï¼Œå®ƒå¿…é ˆè¢«å¼•ç”¨ã€‚
特殊模å¼å—符有下zæ„義:
* 匹é…任何å—符串包å«ç©ºä¸²ã€‚
? 匹é…任何單茼r符。
[...] åŒ¹é…æ‰€åŒ…å«çš„任何å—符之一。用一茬så—符 (`-')
分隔的一å°å—ç¬¦æ„æ€æ˜¯ä¸€ range expression (Såœè¡¨é”å¼)ï¼›
任何排在它怳åœã€žæ¼²r符,包å«å®ƒæ€´A都被匹é…。
排åºä½¿ç”¨ç•¶å‰èªžè¨€ç’°å¢ƒçš„å—ç¬¦é †åºå’Œå—符集。如果 [ 之後的第一-
茼r符是一 ! 或是一 ^ 那麼任何ä¸åŒ…å«åœ¨å…§çš„å—符將被匹é…。-
Såœè¡¨é”å¼ä¸å—ç¬¦çš„é †åºæ˜¯ç”±ç•¶å‰èªžè¨€ç’°å¢ƒ å’Œç’°å¢ƒè®Šé‡ LC_COLLATE çš„
(如果è¨ç½®äº†çš„話) 決定的。一 - åªæœ‰ä½œç‚ºé›†åˆä¸ç¬¬ä¸€èŒ¤å¸ 怮嶀@-
茼r符時æ‰èƒ½è¢«åŒ¹é…。一 ] åªæœ‰æ˜¯é›†åˆä¸ç¬¬ä¸€èŒ¼r符時æ‰èƒ½è¢«åŒ¹é…。
在 [ å’Œ ] ä¸ï¼Œcharacter classes (å—符類) å¯ä»¥ç”¨ [:class:]
é€™æ¨£çš„èªžæ³•ä¾†æŒ‡å®šï¼Œé€™è£ class 是在 POSIX.2
標準ä¸å®šç¾©çš„下列類å之一:
alnum alpha ascii blank cntrl digit graph lower print punct
space upper word xdigit
一茼r符類匹é…任何屬於這一類的å—符。word
å—符類匹é…å—æ¯ï¼Œæ•¸å—å’Œå—符 _。
在 [ å’Œ ] ä¸ï¼Œå¯ä»¥ç”¨ [=c=] 這樣的語法來指定 equivalence class
(ç‰åƒ¹é¡ž)。它匹é…與å—符 c æœ‰ç›¸åŒæ¸ä¸¦æ¬Š (collation weight,由當å‰
語言環境定義) çš„å—符。
在 [ å’Œ ] ä¸ï¼Œèªžæ³• [.symbol.] åŒ¹é…æ¸ä¸¦ç¬¦è™Ÿ (collating symbol)
symbol。
如果使用內建命令 shopt 啟用了 shell é¸é … extglob,
å°‡è˜åˆ¥å¦å¤–幾種模å¼åŒ¹é…æ“作符。下悸煽yzä¸ï¼Œpattern-list 是一 或多-
èšç‹¾â€˜H | 分隔的列表。復åˆçš„æ¨¡å¼å¯ä»¥ä½¿ç”¨ä¸€èŒ¤å³–h茪U列的 忍¡å¼æ§‹é€ 出來:
?(pattern-list)
åŒ¹é…æ‰€çµ¦æ¨¡å¼é›¶æ¬¡æˆ–一次出ç¾
*(pattern-list)
åŒ¹é…æ‰€çµ¦æ¨¡å¼é›¶æ¬¡æˆ–多次出ç¾
+(pattern-list)
åŒ¹é…æ‰€çµ¦æ¨¡å¼ä¸€æ¬¡æˆ–多次出ç¾
@(pattern-list)
æº–ç¢ºåŒ¹é…æ‰€çµ¦æ¨¡å¼ä¹‹ä¸€
!(pattern-list)
ä»»ä½•é™¤äº†åŒ¹é…æ‰€çµ¦æ¨¡å¼ä¹‹ä¸€çš„å—串
Quote Removal
ç¶“éŽå‰æ‚¸ç”„X展之後,所有未引用的å—符 \, ', 以åŠä¸¦éžä¸Šzæ“´å±•çµæžœçš„å—符 "
都被刪除。
V(REDIRECTION)
在命令執行å‰ï¼Œå®ƒçš„輸入和輸出å¯èƒ½è¢« redirected ( w V) A 使用一種 shell
å¯ä»¥è§£é‡‹çš„特殊記法。咿wå‘也å¯ä»¥ç”¨æ–¼ç‚ºç•¶å‰ shell 執行環境
打開和關閉檔案。下列咿w呿“作符å¯ä»¥å‰ç½®æˆ–者放在 simple command
( R O) 之ä¸çš„任何ä½ç½®ï¼Œæˆ–者放在 command 之後。-
å’¿w呿˜¯ä»¥å‡ºç¾çš„é †åºé€²è¡Œè™•ç†çš„,從左到å³ã€‚
下列æzä¸ï¼Œå¦‚果檔案æzç¬¦è¢«å¿½ç•¥ï¼Œä¸¦ä¸”ç¬¬ä¸€èŒ·å®šå‘æ“作符是 <, 那麼-
å’¿w呿Œ‡çš„æ˜¯æ¨™æº–輸入 (檔案æz符是 0)。如果咿w呿“作符的第一茼r符是 >,
那麼咿w呿Œ‡çš„æ˜¯æ¨™æº–輸出 (檔案æz符是 1)。
下列æzä¸ï¼Œå’¿w呿“作符之後的詞如果沒有特殊說明,都nç¶“éŽ brace expan-
sion, tilde expansion, parameter expansion, command substitution,
arithmetic expansion, quote removal, pathname expansion, 還有 word
splitting。如果擴展為多於一茧, bash å°‡å ±éŒ¯ã€‚
注æ„å’¿wå‘çš„é †åºéžå¸¸å—。例如,命令
ls > dirlist 2>&1
將標準輸出和標準錯誤咿wå‘到檔案 dirlist, 而命令
ls 2>&1 > dirlist
åªæœƒå°‡æ¨™æº–輸出咿wå‘到檔案 dirlist, å› ç‚ºåœ¨æ¨™æº–è¼¸å‡ºè¢«å’¿wå‘到檔案 dirlist
ä¸ä¹‹å‰ï¼Œæ¨™æº–錯誤被複製為標準輸出。
一些檔å在咿wå‘ä¸è¢« bash 特殊處ç†ï¼Œå¦‚下表所示:
/dev/fd/fd
如果 fd 是一茼X法的整數,檔案æz符 fd 將被複製。
/dev/stdin
檔案æz符 0 被複製。
/dev/stdout
檔案æz符 1 被複製。
/dev/stderr
檔案æz符 2 被複製。
/dev/tcp/host/port
如果 host 是一茼Xæ³•çš„ä¸»æ©Ÿåæˆ– Internet 地å€ï¼Œä¸¦ä¸” port 是
一蚞蒱æ•f號或æœå‹™å,bash 試圖建立與相應的 socket
(套接å—) çš„ TCP 連接。
/dev/udp/host/port
如果 host 是一茼Xæ³•çš„ä¸»æ©Ÿåæˆ– Internet 地å€ï¼Œä¸¦ä¸” port 是
一蚞蒱æ•f號或æœå‹™å,bash 試圖建立與相應的 socket
(套接å—) çš„ UDP 連接。
打開或創建檔案錯誤將導På’¿wå‘出錯。
Redirecting Input
å’¿wå‘輸入使得以 word æ“´å±•çµæžœç‚ºåçš„æª”æ¡ˆè¢«æ‰“é–‹ä¸¦é€šéŽæª”案æz符 n
讀å–,如果沒有指定 n 那麼就作為標準輸入 (檔案æz符為 0) 讀å–。
å’¿wå‘è¼¸å…¥çš„ä¸€èˆ¬å½¢å¼æ˜¯ï¼š
[n]<word
Redirecting Output
å’¿wå‘輸出使得以 word æ“´å±•çµæžœç‚ºåçš„æª”æ¡ˆè¢«æ‰“é–‹ä¸¦é€šéŽæª”案æz符 n
寫入,如果沒有指定 n 那麼就作為標準輸出 (檔案æz符為 1) 寫入。
å’¿wå‘çš„ä¸€èˆ¬å½¢å¼æ˜¯ï¼š
[n]>word
如果咿w呿“作符是 >, 並且啟用了內建命令 set çš„ noclobber
é¸é …,那麼如果 word 擴展後得到的檔åå˜åœ¨ä¸¦ä¸”是一è‹é›²q的檔案,
å’¿wå‘將失敗。如果咿w呿“作符是 >|, 或者咿w呿“作符是 >
並且沒有啟用內建命令 set çš„ noclobber é¸é …,那麼å³ä½¿ word
得出的檔åå˜åœ¨ï¼Œä¹Ÿæœƒå˜—試進行咿wå‘。
Appending Redirected Output )
這種方å¼çš„輸出咿wå‘使得以 word æ“´å±•çµæžœç‚ºåçš„æª”æ¡ˆè¢«æ‰“é–‹ä¸¦é€šéŽæª”案æz符
n å¾žå°¾éƒ¨æ·»åŠ ã€‚å¦‚æžœæ²’æœ‰æŒ‡å®š n 就使用標準輸出 (檔案æz符
1)。如果檔案ä¸å˜åœ¨ï¼Œå®ƒå°‡è¢«å‰µå»ºã€‚
å’¿wå‘çš„ä¸€èˆ¬å½¢å¼æ˜¯ï¼š
[n]>>word
Redirecting Standard Output and Standard Error
Bash å…è¨±ä½¿ç”¨é€™ç¨®çµæ§‹å°‡æ¨™æº–輸出和標準錯誤 (檔案æz符 1 å’Œ 2) å’¿wå‘到以
word æ“´å±•çµæžœç‚ºå的檔案ä¸ã€‚
有兩種咿w呿¨™æº–輸出/標準錯誤的形å¼ï¼š
&>word
還有
>&word
兩種形å¼ä¸ï¼ŒæŽ¨è–¦ä½¿ç”¨ç¬¬ä¸€ç¨®ã€‚它與
>word 2>&1
在語義上ç‰åƒ¹ã€‚
Here Documents
這種咿wå‘使得 shell å¾žç•¶å‰æºæª”案讀å–輸入,直到é‡åˆ°åƒ…åŒ…å« word 的一行
(並且沒有尾部空白,trailing blanks) 為æ¢ã€‚直到這一點的所有行被用作
命令的標準輸入。
here-document çš„æ ¼å¼æ˜¯ï¼š
<<[-]word
here-document
delimiter
䏿œƒå° word 進行 parameter expansion, command substitution, arithmetic
expansion, 或者 pathname expansion。如果 word ä¸ä»»ä½•å—符是引用的,
delimiter å°‡æ˜¯å° word é€²è¡Œå¼•ç”¨åˆªé™¤çš„çµæžœï¼Œhere-document
ä¸çš„è¡Œä¸æœƒè¢«æ“´å±•。如果 word 沒有被引用,here-documnet ä¸çš„æ‰€æœ‰è¡Œéƒ½nç¶“éŽ
parameter expansion, command substitution, 和 arithmetic expansion。
在後一種情æ³ä¸‹ï¼Œå—符åºåˆ— \<newline> è¢«å¿½ç•¥ï¼›å¿…é ˆç”¨ \ 來引用å—符 \, $,
和 `.
如果咿w呿“作符是 <<-, 那麼所有å‰å°Žçš„ tab å—ç¬¦éƒ½è¢«å¾žè¼¸å…¥è¡Œå’ŒåŒ…å« delim-
iter 的行ä¸åˆªé™¤ã€‚這樣使得 shell 稿本ä¸çš„ here-document
å¯ä»¥è¢«æ›´å¥½åœ°ç¸®é€²ã€‚
Here Strings
here-document çš„è®Šç¨®ï¼Œå½¢å¼æ˜¯
<<<word
word 被擴展,æä¾›çµ¦å‘½ä»¤ä½œç‚ºæ¨™æº–輸入。
Duplicating File Descriptors y )
å’¿w呿“作符
[n]<&word
用於複製檔案æz符。如果 word 擴展為一茤峖hèšïš¶r, n 代表的檔案æ-
z符將æˆç‚ºé‚£èš—仵袨yz符的複製。如果 word ä¸çš„æ•¸å—並未指定一-
茬Q用於讀å–的檔案æz符,將產生一茷定å‘錯誤。如果 word 擴展為 -, 檔案æ-
z符 n 將被關閉。如果沒有指定 n A 將使用標準輸入 (檔案æz符 0)。
類似的,æ“作符
[n]>&word
用於複製輸出檔案æz符。如果沒有指定 n A 將使用標準輸出 (檔案æz符
1)。如果 word ä¸çš„æ•¸å—並未指定一茬Q用於輸出的檔案æz符,將產生一-
å’¿wå‘錯誤。 特殊情æ³ä¸‹ï¼Œå¦‚果忽略了 n,並且 word ä¸¦éžæ“´å±•為一茤峖h-
èšïš¶r, 標準輸出和標準錯誤將被咿wå‘ï¼Œå’Œå‰æŽ¢yz的一樣。
Moving File Descriptors
å’¿w呿“作符
[n]<&digit-
將檔案æz符 digit 移動為檔案æz符 n, 或標準輸入 (檔案æz符
0),如果沒有指定 n 的話。 digit 複製為 n 之後就被關閉了。
類似的,咿w呿“作符
[n]>&digit-
將檔案æz符 digit 移動為檔案æz符 n, 或標準輸出 (檔案æz符
1),如果沒有指定 n 的話。
Opening File Descriptors for Reading and Writing
å’¿w呿“作符
[n]<>word
使得以 word æ“´å±•çµæžœç‚ºåçš„æª”æ¡ˆè¢«æ‰“é–‹ï¼Œé€šéŽæª”案æz符 n
進行讀寫。如果沒有指定 n 那麼就使用檔案æz符
0。如果檔案ä¸å˜åœ¨ï¼Œå®ƒå°‡è¢«å‰µå»ºã€‚
W(ALIASES)
Aliases (åˆ¥åæ©Ÿåˆ¶) å…許將一茧來替æ›ç‚ºä¸€èŒ¼r符串,如果它是 一-
蚋眾璈R令的第一茧的話。shell 記錄著一èOå列表,å¯ä»¥ä½¿ç”¨ 內建命令
alias å’Œ unalias ä¾†å®šç¾©å’Œå–æ¶ˆ (åƒè¦‹ä¸‹æ‚¸ shell O(SHELL BUILTIN
COMMANDS) ç« ç¯€)。æ¯èŒ¤Rä»¤çš„ç¬¬ä¸€èŒ§ï¼Œå¦‚æžœæ²’æœ‰å¼•ç”¨ï¼Œéƒ½å°‡è¢«æª¢æŸ¥æ˜¯å¦æ˜¯ä¸€-
èOå。 如果是,這-
茧將被它所指代的文本替æ›ã€‚別å和替æ›çš„æ–‡æœ¬å¯ä»¥åŒ…å«ä»»ä½•有效 çš„ shell
輸入,包å«ä¸Šæƒ˜C出的 metacharacters ( r ) ï¼Œç‰¹æ®Šæƒ…æ³æ˜¯åˆ¥åä¸ä¸èƒ½åŒ…å«
=ã€‚æ›¿æ›æ–‡æœ¬çš„第一茧也被檢查是å¦
是別å,但是如果它與被替æ›çš„別å相åŒï¼Œå°±ä¸æœƒå†æ›¿æ›ç¬¬äºŒæ¬¡ã€‚這æ„味著å¯ä»¥ç”¨
ls 作為 ls -F 的別å, bash 䏿œƒéžæ¸åœ°å±•é–‹æ›¿æ›æ–‡æœ¬ã€‚如果別å的最後一-
茼r符是 blank, 那麼命令ä¸åˆ¥å之後的下一-
茧也將被檢查是å¦èƒ½é€²è¡Œåˆ¥å展開。
別åå¯ä»¥ä½¿ç”¨ alias 命令來創建或列舉出來,使用 unalias 命令來刪除。
åœ¨æ›¿æ›æ–‡æœ¬ä¸æ²’æœ‰åƒæ•¸æ©Ÿåˆ¶ã€‚如果需nåƒæ•¸ï¼Œæ‡‰ç•¶ä½¿ç”¨ shell 函數 (åƒè¦‹ä¸‹æ‚¸
FUNCTIONS ) 段è½)。
如果 shell 䏿˜¯äº¤äº’的,別å將䏿œƒå±•開,除éžä½¿ç”¨å…§å»ºå‘½ä»¤ shopt è¨ç½®äº†
expand_aliases é¸é …。
關於別å的定義和使用ä¸çš„è¦å‰‡æ¯”較混亂。 Bash
在執行一行ä¸çš„任何命令之å‰ï¼Œç¸½æ˜¯è®€å…¥è‡³å°‘完整一行的輸入。
別ååœ¨å‘½ä»¤è¢«è®€å–æ™‚å±•é–‹ï¼Œè€Œä¸æ˜¯åœ¨åŸ·è¡Œçš„æ™‚唌Cå› æ¤ï¼Œåˆ¥å定義如果 å’Œå¦ä¸€-
茤R令在åŒä¸€è¡Œï¼Œé‚£éº¼ä¸æœƒèµ·ä½œç”¨ï¼Œé™¤éžè®€å…¥äº†ä¸‹ä¸€è¡Œã€‚
別å定義之後,åŒä¸€è¡Œä¸çš„命令䏿œƒå—新的別å影響。這種行為
在函數執行時å˜åœ¨çˆè°ï¼Œå› ç‚ºåˆ¥åæ›¿æ›æ˜¯åœ¨å‡½æ•¸å®šç¾©è¢«è®€å–時發生的,
è€Œä¸æ˜¯å‡½æ•¸è¢«åŸ·è¡Œçš„æ™‚唌Aå› ç‚ºå‡½æ•¸å®šç¾©æœ¬è¶³O一è‹_åˆå‘½ä»¤ã€‚çµæžœï¼Œ
在函數ä¸å®šç¾©çš„別ååªæœ‰ç•¶é€™èŒ–è»ï›€é¶¡ç‘½é¦±~會生效。為了ä¿éšªèµ·è¦‹ï¼Œ
應當總是將別å定義放在單ç¨çš„一行,ä¸åœ¨å¾©åˆå‘½ä»¤ä¸ä½¿ç”¨ alia C
ä¸ç®¡ä»€éº¼æƒ…æ³ä¸‹ï¼Œåˆ¥å都被 shell 函數超越 (be superseded)。
(FUNCTIONS)
一 shell 函數,以上 SHELL GRAMMAR 䏿-
z的方法定義,ä¿å˜è‘—一系列的命令,ç‰å¾…ç¨å¾ŒåŸ·è¡Œã€‚ ç•¶ shell 函數å作為一-
蚋眾璈R令å使用時,這茖è»ïš¶Wé—œè¯çš„命令的åºåˆ— è¢«åŸ·è¡Œã€‚å‡½æ•¸åœ¨ç•¶å‰ shell
的上下文環境ä¸åŸ·è¡Œï¼›ä¸æœƒå‰µå»ºæ–°çš„進程來 解釋它 (這與 shell
稿本的執行形æˆäº†å°æ¯”)。當執行函數時,函數
çš„åƒæ•¸æˆç‚ºåŸ·è¡ŒéŽç¨‹ä¸çš„ä½ç½®åƒæ•¸ (positional parameters)ã€‚ç‰¹æ®Šåƒæ•¸ #
è¢«æ›´æ–°ä»¥åæ˜ 這蚥雂Cä½ç½®åƒæ•¸ 0 䏿œƒæ”¹è®Šã€‚函數執行時, FUNCNAME
變é‡è¢«è¨ç½®ç‚ºå‡½æ•¸çš„å稱。函數和它的調用者在 shell 執行環境的所有 å…¶ä»–æ–¹-
掖ㄛOä¸€æ¨£çš„ï¼Œç‰¹æ®Šæƒ…æ³æ˜¯ DEBUG 陷阱 (åƒè¦‹ä¸‹æŽªé´¾æ¾ˆå ¥è» trap çš„æz,在
shell O(SHELL BUILTIN COMMANDS) ç« ç¯€ä¸)
䏿œƒè¢«ç¹¼æ‰¿ï¼Œé™¤éžå‡½æ•¸è¨ç½®äº† trace 屬性 (åƒè¦‹ä¸‹æŽªé´¾æ¾ˆå ¥è» declare çš„æ-
z)。
函數ä¸çš„局部變é‡å¯ä»¥ä½¿ç”¨å…§å»ºå‘½ä»¤ local ä¾†è²æ˜Žã€‚通常情æ³ä¸‹ï¼Œè®Šé‡å’Œå®ƒæ€-
b函數和它的調用者之間是共享的。
如果函數ä¸åŸ·è¡Œäº†å…§å»ºå‘½ä»¤ retur A
é‚£éº¼å‡½æ•¸çµæŸï¼ŒåŸ·è¡Œå¾žå‡½æ•¸èª¿ç”¨ä¹‹å¾Œçš„下一茤R令開始。
å‡½æ•¸çµæŸå¾Œï¼Œä½ç½®åƒæ•¸çš„HåŠç‰¹æ®Šåƒæ•¸ # 都將姜m為它怞b函數執行å‰çš„C
函數å和定義å¯ä»¥ä½¿ç”¨å…§å»ºå‘½ä»¤ declare 或 typeset åŠ ä¸Š -f
åƒæ•¸ä¾†åˆ—出。如果在 declare 或 typeset 命令ä¸ä½¿ç”¨ -F
é¸é …å°‡åªåˆ—出函數å。函數å¯ä»¥ä½¿ç”¨å…§å»ºå‘½ä»¤ export åŠ ä¸Š -f
åƒæ•¸å°Žå‡ºï¼Œä½¿å¾—å shell ä¸å®ƒæŠQ自動定義。
函數å¯ä»¥æ˜¯éžæ¸çš„ã€‚å°æ–¼éžæ¸èª¿ç”¨çš„æ¬¡æ•¸æ²’有硬性制。
在一定的環境下,shell å…許進行算術表é”å¼çš„æ±‚ (åƒè¦‹å…§å»ºå‘½ä»¤ let å’Œ
Arithmetic Expansion (算術表é”å¼))。 求-
æ´å³Tå®šå¯¬åº¦çš„æ•´æ•¸ï¼Œä¸æª¢æŸ¥æ˜¯å¦æº¢å‡ºï¼Œä½†æ˜¯è¢«é›¶é™¤æœƒè¢«æ•ç²ï¼Œæ¨™è¨˜ç‚ºéŒ¯èª¤ã€‚
æ“作數åŠå…¶å„ªå…ˆç´šå’Œèšåˆç¨‹åº¦èˆ‡ C 語言ä¸ç›¸åŒã€‚下列æ“作數的列表按照相åŒ
優先級的æ“ä½œæ•¸å…¶ç´šåˆ¥ä¾†åˆ†çµ„ã€‚åˆ—å‡ºçš„ç´šåˆ¥é †åºæ˜¯å„ªå…ˆç´šéžæ¸›çš„。
id++ id--
變é‡è‡ªå¢ž/自減 (在後)
++id --id
變é‡è‡ªå¢ž/自減 (在å‰)
- + (單目的) å–t/å–æ£
! ~ é‚輯和ä½å–å
** æ’«
* / % æ…¼A除,å–餘
+ - åŠ ï¼Œæ¸›
<< >> å·¦/å³ä½ç§»
<= >= < >
比較
== != 相ç‰/ä¸ç‰
& ä½èˆ‡ (AND)
^ ä½ç•°æˆ– (exclusive OR)
| 使ˆ– (OR)
&& é‚輯與 (AND)
|| é‚輯或 (OR)
expr?expr:expr
æ¢ä»¶æ±‚
= *= /= %= += -= <<= >>= &= ^= |=
賦
expr1 , expr2
逗號表é”å¼
shell 變é‡å¯ä»¥ä½œç‚ºæ“作數;在表é”弿±‚妨eæœƒé€²è¡Œåƒæ•¸æ“´å±•。
在表é”å¼ä¸ï¼Œå¯ä»¥ç”¨å稱引用 shell 變é‡ï¼Œä¸å¿…ä½¿ç”¨åƒæ•¸æ“´å±•的語法。
變é‡è¢«å¼•用時,其Q作為算術表é”å¼ä¾†æ±‚C shell
變é‡ç”¨æ–¼è¡¨é”å¼ä¸æ™‚,ä¸å¿…啟用整數屬性。
以 0 為å‰å°Žçš„常é‡è¢«ç•¶ä½œå…«é€²åˆ¶æ•¸ï¼Œä»¥ 0x 或 0X 作為å‰å°Žè¡¨æ˜Žæ˜¯åå…進制。
其他情æ³ä¸‹ï¼Œæ•¸å—çš„å½¢å¼æ˜¯ [base#]nï¼Œé€™è£ base 是一 2 到 64 çš„å進制數-
A作為數å—的基數,n 是在這èŒç¾†ïš´å…®ïš¶r的C 如果忽略了 base#,將以 10
為基數。大於 10 的數å—便¬¡ä»¥å°å¯«å—æ¯ï¼Œ 大坫嗿¯ï¼Œ@ å’Œ _ 表示。如果 base
å°æ–¼æˆ–ç‰æ–¼ 36,在表示 10 與 35 之間
çš„æ•¸å—æ™‚å°å¯«å—æ¯å’Œå¤§å¯«å—æ¯å¯ä»¥äº’æ›ã€‚
æ“ä½œç¬¦æ ¹æ“šå„ªå…ˆç´šé †åºé€²è¡Œæ±‚C圓括號ä¸çš„å表é”å¼è¢«æœ€å…ˆæ±‚Aå¯èƒ½æœƒ
超越上悸瑰u先級è¦å‰‡ã€‚
æ¢ä»¶è¡¨é”å¼ç”¨æ–¼ [[ 復åˆå‘½ä»¤ä»¥åŠå…§å»ºå‘½ä»¤ test å’Œ [ ä¸ï¼Œ
用來測試檔案屬性,進行å—符串和算術比較。表é”å¼ä½¿ç”¨ä¸‹-
æ‚¸ç†™ç’†å œå³‡G進制æ“ä½œæ§‹é€ ã€‚ å¦‚æžœæŸæ“作的任何 file åƒæ•¸çš„形弿˜¯
/dev/fd/n,那麼將檢查 檔案æz符 nã€‚å¦‚æžœæŸæ“作的 file åƒæ•¸æ˜¯
/dev/stdin, /dev/stdout 或者 /dev/stderr 之一,將分別檢查檔案æz符
0,1 和 2。
-a file
如果 file å˜åœ¨å‰‡ç‚ºçœŸã€‚
-b file
如果 file å˜åœ¨ä¸”為塊è¨å‚™å‰‡ç‚ºçœŸã€‚
-c file
如果 file å˜åœ¨ä¸”為å—符è¨å‚™å‰‡ç‚ºçœŸã€‚
-d file
如果 file å˜åœ¨ä¸”是一茈媬則為真。
-e file
如果 file å˜åœ¨å‰‡ç‚ºçœŸã€‚
-f file
如果 file å˜åœ¨ä¸”為普通檔案則為真。
-g file
如果 file å˜åœ¨ä¸”是è¨ç½®çµ„IDçš„ (sgid) 則為真。
-h file
如果 file å˜åœ¨ä¸”ç‚ºç¬¦è™ŸéˆæŽ¥å‰‡ç‚ºçœŸã€‚
-k file
如果 file å˜åœ¨ä¸”è¨ç½®äº† ``sticky'' ä½ (粘滯ä½) 則為真。
-p file
如果 file å˜åœ¨ä¸”是一茤Råç®¡é“ (FIFO) 則為真。
-r file
如果 file å˜åœ¨ä¸”å¯è®€å‰‡ç‚ºçœŸã€‚
-s file
如果 file å˜åœ¨ä¸”大å°å¤§æ–¼é›¶å‰‡ç‚ºçœŸã€‚
-t fd 如果檔案æz符 fd æ˜¯æ‰“é–‹çš„ä¸”å°æ‡‰ä¸€èŒžè¢Ÿæ¦h為真。
-u file
如果 file å˜åœ¨ä¸”是è¨ç½®ä½¿ç”¨è€…IDçš„ (suid) 則為真。
-w file
如果 file å˜åœ¨ä¸”å¯å¯«å‰‡ç‚ºçœŸã€‚
-x file
如果 file å˜åœ¨ä¸”å¯åŸ·è¡Œå‰‡ç‚ºçœŸã€‚
-O file
如果 file å˜åœ¨ä¸”為有效使用者IDæ‰€æ“æœ‰å‰‡ç‚ºçœŸã€‚
-G file
如果 file å˜åœ¨ä¸”為有效組IDæ‰€æ“æœ‰å‰‡ç‚ºçœŸã€‚
-L file
如果 file å˜åœ¨ä¸”ç‚ºç¬¦è™ŸéˆæŽ¥å‰‡ç‚ºçœŸã€‚
-S file
如果 file å˜åœ¨ä¸”為套接å—則為真。
-N file
如果 file å˜åœ¨ä¸”上次讀å–後被蚹儮L則為真。
file1 -nt file2
如果 file1 比 file2 næ–° (æ ¹æ“šèš¹é´¾æš¾),或者 如果 file1 å˜åœ¨è€Œ
file2 ä¸å˜åœ¨ï¼Œå‰‡ç‚ºçœŸã€‚
file1 -ot file2
如果 file1 比 file2 更舊,或者 如果 file1 ä¸å˜åœ¨è€Œ file2
å˜åœ¨ï¼Œå‰‡ç‚ºçœŸã€‚
file1 -ef file2
如果 file1 å’Œ file2 指的是相åŒçš„è¨å‚™å’Œ inode 號則為真。
-o optname
如果啟用了 shell é¸é … optname 則為真。åƒè¦‹ä¸‹æŽªé´¾æ¾ˆå œR令 set çš„
-o é¸é …çš„æzä¸çš„é¸é …列表。
-z string
如果 string 的長度為 0 則為真。
-n string
string 如果 string çš„é•·åº¦éž 0 則為真。
string1 == string2
如果å—符串相ç‰å‰‡ç‚ºçœŸã€‚= å¯ä»¥ç”¨æ–¼ä½¿ç”¨ == çš„å ´åˆä¾†ç›¸å®¹ POSIX
è¦ç¯„。
string1 != string2
如果å—符串ä¸ç›¸ç‰å‰‡ç‚ºçœŸã€‚
string1 < string2
如果 string1 在當å‰èªžè¨€ç’°å¢ƒçš„å—å…¸é †åºä¸æŽ’在 string2 之å‰å‰‡ç‚ºçœŸã€‚
string1 > string2
如果 string1 在當å‰èªžè¨€ç’°å¢ƒçš„å—å…¸é †åºä¸æŽ’在 string2 之後則為真。
arg1 OP arg2
OP 是 -eq, -ne, -lt, -le, -gt, 或 -ge
之一。這些算術二進制æ“作返回真,如果 arg1 與 arg2 分別是
相ç‰ï¼Œä¸ç‰ï¼Œå°æ–¼ï¼Œå°æ–¼æˆ–ç‰æ–¼ï¼Œå¤§æ–¼ï¼Œå¤§æ–¼æˆ–ç‰æ–¼é—œç³»ã€‚ Arg1 å’Œ
arg2 å¯ä»¥æ˜¯æ£/t整數。
當執行一蚋眾璈R令時,shell 進行下列擴展,賦Må’¿wå‘,從左到å³ã€‚
1. 解釋器標記為與變é‡è³¦ (在命令å之å‰çš„) å’Œ-
å’¿w呿œ‰é—œçš„詞被ä¿å˜ç‰å¾…隨後處ç†ã€‚
2. 並éžè®Šé‡è³¦ïŸ³å³†å®šå‘的詞被擴展。如果擴展後ä»ç„¶æœ‰è©žä¿ç•™ä¸‹ä¾†ï¼Œç¬¬ä¸€-
茧被 作為命令åï¼Œå…¶é¤˜è©žæ˜¯åƒæ•¸ã€‚
3. å’¿w呿Œ‰ç…§ä¸Š REDIRECTION ä¸è¬›åˆ°çš„è¦å‰‡é€²è¡Œã€‚
4. æ¯èš¥åƒ†q賦 = 之後的文本在賦予變é‡ä¹‹å‰nç¶“éŽæ³¢æµªç·šæ“´å±•,
åƒæ•¸æ“´å±•,命令替æ›ï¼Œç®—術擴展和引用刪除。
如果沒有得到命令å,變é‡è³¦ï †véŸ¿ç•¶å‰ shell 環境。å¦å‰‡ï¼Œè®Šé‡è¢«åŠ å…¥
被執行的命令的環境ä¸ï¼Œä¸å½±éŸ¿ç•¶å‰ shell 環境。如果任何賦囮@試圖
為åªè®€è®Šé‡è³¦ïŸ«A將導P出錯,命令以éžé›¶ç‹€æ…‹ïŸºh出。
如果沒有得到命令å,咿wå‘仿œƒé€²è¡Œï¼Œä½†æ˜¯ä¸å½±éŸ¿ç•¶å‰ shell 環境。
å’¿wå‘出錯將使命令以éžé›¶ç‹€æ…‹ïŸºh出。
如果擴展後有命令åä¿ç•™ä¸‹ä¾†ï¼Œé‚£éº¼åŸ·è¡ŒéŽç¨‹å¦‚下所示。å¦å‰‡ï¼Œå‘½ä»¤é€€å‡ºã€‚
如果在任何擴展ä¸åŒ…å«å‘½ä»¤æ›¿æ›ï¼Œé‚£éº¼æ•´èŒ¤R令的退出狀態是最後一茤R令
替æ›çš„退出狀態。如果沒有進行命令替æ›ï¼Œå‘½ä»¤ä»¥ç‹€æ…‹é›¶é€€å‡ºã€‚
å‘½ä»¤è¢«æ‹†åˆ†ç‚ºè©žä¹‹å¾Œï¼Œå¦‚æžœçµæžœæ˜¯ä¸€èš‹çœ¾ç’ˆR令和å¯é¸çš„åƒæ•¸åˆ—表,將執行 下-
悸瑣犑@。
如果命令å䏿²’有斜槓,shell 試圖定ä½å‘½ä»¤ä½ç½®ã€‚如果å˜åœ¨åŒåçš„ shell
函數,函數將被執行,åƒä¸Š FUNCTIONS ä¸è¬›åˆ°çš„一樣。如果åç¨±ä¸æ˜¯ä¸€-
茖è»ïš±Ashell 從 å…§å»ºå‘½ä»¤ä¸æœç´¢å®ƒã€‚如果找到 å°æ‡‰å‘½ä»¤ï¼Œå®ƒå°‡è¢«åŸ·è¡Œã€‚
如果åç¨±æ—¢ä¸æ˜¯ shell å‡½æ•¸ä¹Ÿä¸æ˜¯ä¸€èŒªæ¾ˆå œRä»¤ï¼Œä¸¦ä¸”æ²’æœ‰åŒ…å«æ–œæ§“, bash
æœç´¢ PATH çš„æ¯èŒ¼å”ï¼ŒæŸ¥æ‰¾å«æœ‰æ¤æª”å (å¯åŸ·è¡Œæª”案) 的目錄。 Bash
使用散列表來儲å˜å¯åŸ·è¡Œæª”案的全路徑 (åƒè¦‹ä¸‹æ‚¸ shell O(SHELL
BUILTIN COMMANDS) ä¸çš„ has C åªæœ‰åœ¨æ•£åˆ—è¡¨ä¸æ²’有找到æ¤å‘½ä»¤ï¼Œæ‰å° PATH
進行完整的æœç´¢ã€‚如果æœç´¢ä¸æˆåŠŸï¼Œshell 輸出錯誤消æ¯ï¼Œè¿”回退出狀態 127。
如果æœç´¢æˆåŠŸï¼Œæˆ–è€…å‘½ä»¤ä¸åŒ…å«ä¸€èŒ¤å³–hè“袟b,shell 在單ç¨çš„執行環境ä¸
執行這茧{å¼ã€‚åƒæ•¸ 0
被è¨ç½®ç‚ºæ‰€çµ¦åç¨±ï¼›å‘½ä»¤çš„å…¶ä»–åƒæ•¸è¢«è¨ç½®ç‚ºæ‰€çµ¦çš„åƒæ•¸ï¼Œ 如果有的話。
å¦‚æžœåŸ·è¡Œå¤±æ•—ï¼Œå› ç‚ºæª”æ¡ˆä¸æ˜¯å¯åŸ·è¡Œæ ¼å¼ï¼Œä¸¦ä¸”æ¤æª”æ¡ˆä¸æ˜¯ç›®éŒ„,就å‡å®šå®ƒæ˜¯
一 shell script (稿本),一茈]å« shell å‘½ä»¤çš„æª”æ¡ˆã€‚æ¤æ™‚å°‡åµåŒ– (spawn)
出一茪l shell 來執行它。å shell å¥såˆå§‹åŒ–自芋Aæ•ˆæžœå°±å¥½åƒæ˜¯ 執行了一-
虓sçš„ shell 來處ç†ç¨¿æœ¬ä¸€æ¨£ï¼Œä½†æ˜¯çˆ¶ shell ä¿å˜çš„命令ä½ç½®ä»ç„¶è¢« ä¿ç•™
(åƒè¦‹ä¸‹æ‚¸ shell O(SHELL BUILTIN COMMANDS) ä¸çš„ hash C
å¦‚æžœç¨‹å¼æ˜¯ä»¥ #! é–‹é 的檔案,那麼第一行的其餘部分指定了這-
茧{å¼çš„解釋器。 shell
執行指定的解釋器,如果作æ¥ç³»çµ±ä¸æœƒè‡ªè¡Œè™•ç†é€™ç¨®å¯åŸ·è¡Œæª”æ¡ˆæ ¼å¼çš„話。
è§£é‡‹å™¨çš„åƒæ•¸ç”±ä¸‹æƒœT部分組æˆï¼šç¨‹å¼ç¬¬ä¸€è¡Œä¸è§£é‡‹å™¨å稱之後的å¯é¸çš„一-
èŒæŠïš±A 程å¼çš„åç¨±ï¼Œå‘½ä»¤è¡Œåƒæ•¸ï¼Œå¦‚果有的話。
shell 有 execution environment (執行環境) 的概念,由下列內容組æˆï¼š
o shell 啟動時繼承的打開的檔案,例如在內建命令 exec ä¸ä½¿ç”¨å’¿wå‘
蚹麊熊痕G
o ç•¶å‰å·¥ä½œç›®éŒ„,使用 cd,pushd 或者 popd è¨ç½®ï¼Œæˆ–是由 shell
在啟動時繼承得到
o æª”æ¡ˆå‰µå»ºæ¨¡å¼æŽ©ç¢¼ï¼Œä½¿ç”¨ umask è¨ç½®æˆ–是從 shell 的父進程ä¸ç¹¼æ‰¿å¾—到
o ç•¶å‰é™·é˜±ï¼Œç”¨ trap è¨ç½®
o shell åƒæ•¸ï¼Œä½¿ç”¨è®Šé‡è³¦ïŸ³å³ˆ set
è¨ç½®ï¼Œæˆ–者是從父進程的環境ä¸ç¹¼æ‰¿å¾—到
o shell 函數,在執行ä¸å®šç¾©æˆ–者是從父進程的環境ä¸ç¹¼æ‰¿å¾—到
o è¨ç‚ºå…許的é¸é …,在執行時è¨ç½® (n麼是é è¨å…許的,-
n麼是命令行給出的) 或者是 用 set è¨ç½®
o 用 shopt è¨ç‚ºå…許的é¸é …
o 用 alias 定義的 shell 別å
o å„種進程號,包å«I景作æ¥çš„進程號,$$ 的Aä»¥åŠ $PPID çš„
ç•¶ä¸¦éž shell 函數或內置命令的簡單命令執行時,它在一茈悀Uz內容組æˆçš„
å–®ç¨çš„執行環境ä¸å•Ÿå‹•。除éžå¦å¤–說明,ㄛO從 shell ä¸ç¹¼æ‰¿çš„。
o shell æ‰“é–‹çš„æª”æ¡ˆï¼ŒåŠ ä¸Šå°å‘½ä»¤ä½¿ç”¨å’¿wå‘èš¹é´Mæ·»åŠ çš„æª”æ¡ˆ
o ç•¶å‰å·¥ä½œç›®éŒ„
o æª”æ¡ˆå‰µå»ºæ¨¡å¼æŽ©ç¢¼
o 標記為導出 (export) çš„ shell 變é‡ï¼Œä»¥åŠå‚³éžåˆ°ç’°å¢ƒä¸ç‚ºé€™-
茤R令導出的變é‡
o shell æ•æ‰çš„陷阱被姜m為從 shell 的父進程ä¸ç¹¼æ‰¿çš„Ashell
忽略的陷阱 也被忽略
在單ç¨çš„環境ä¸å•Ÿå‹•的命令ä¸èƒ½å½±éŸ¿ shell 的執行環境。
命令替æ›å’Œç•°æ¥å‘½ä»¤éƒ½åœ¨å shell 環境ä¸åŸ·è¡Œã€‚å shell 環境是鴞 shell
環境的賦A但 shell æ•æ‰çš„陷阱被姜m為 shell 啟動時從父進程ä¸ç¹¼æ‰¿çš„C
作為管é“一部分來執行的內建命令也在一茪l shell 環境ä¸åŸ·è¡Œã€‚å°å shell
環境所作蚹鴾ㄞé‰v響到鴞 shell 的執行環境。
如果命令後惇O & ä¸¦ä¸”æ²’æœ‰å•Ÿç”¨ä½œæ¥æŽ§åˆ¶ï¼Œå‘½ä»¤çš„é è¨æ¨™æº–輸入將是空檔案
/dev/null。å¦å‰‡ï¼Œè¢«åŸ·è¡Œçš„命令從調用它的 shell ä¸ç¹¼æ‰¿è¢«å’¿wå‘蚹麊
檔案æz符。
(ENVIRONMENT)
當一茧{å¼åŸ·è¡Œæ™‚,它被賦予一茼r符串數組,æˆç‚ºç’°å¢ƒ environment。 它是一
å稱-ï ƒ (name-value) çš„åˆ—è¡¨ï¼Œå½¢å¼æ˜¯ name=value.
shell æä¾›äº†å¤šç¨®æ“作環境的方法。啟動時,shell 掃æè‡ªèµ¤ç‘°è—¿ç‰·A為æ¯èé‹®
çš„åå—å‰µå»ºä¸€èŒæŠïš±A自動地將它標記為 export
(å‘å進程導出的)。被執行的命令繼承了這蚗藿牷C export å’Œ declare -x
命令å…è¨±åƒæ•¸å’Œå‡½æ•¸è¢«åŠ å…¥åˆ°ç’°å¢ƒä¸æˆ–從環境ä¸åˆªé™¤ã€‚如果環境ä¸åƒæ•¸çš„ 被-
蚹鵅A新足å¯è—¿çŒæ¼±@部分,替æ›äº†èˆŠïŸ«C所有被執行的命令繼承的環境 包å«
shell çš„åˆå§‹ç’°å¢ƒ (å¯èƒ½ïŸ½Q蚹儮L),減去被 unset å‘½ä»¤åˆªé™¤çš„ï¼ŒåŠ ä¸Šé€šéŽ
export å’Œ declare -x å‘½ä»¤æ·»åŠ çš„éƒ¨åˆ†ã€‚
å¯ä»¥åœ¨ä»»ä½• simple command 或函數的環境ä¸è¨å®šæš«æ™‚æœ‰æ•ˆçš„åƒæ•¸ï¼Œåª-
nå°‡åƒæ•¸è³¦ïŸ³éŸ˜b命令剿ޢNå¯ä»¥äº†ï¼Œ åƒè¦‹ä¸Š PARAMETERS çš„æz。這些賦-
ï …yå¥åªåœ¨é€™èŒ¤Rä»¤çš„ç’°å¢ƒä¸æœ‰æ•ˆã€‚
如果è¨ç½®äº†å…§å»ºå‘½ä»¤ set çš„ -k é¸é …, æ³£ 變é‡è³¦-
ㄠN放到命令的環境ä¸ï¼Œä¸åƒ…是在命令å剿‚¸æ¼•漕ïŽC
ç•¶ bash 執行一茈~éƒ¨å‘½ä»¤æ™‚ï¼Œè®Šé‡ _
被è¨ç½®ç‚ºå‘½ä»¤çš„æª”案全å,然後被傳éžåˆ°å‘½ä»¤çš„環境之ä¸ã€‚
從 shell 的角度看,一茤R令退出狀態是 0 æ„味著æˆåŠŸé€€å‡ºã€‚ 退出狀態是 0
表明æˆåŠŸã€‚éžé›¶ç‹€æ…‹ïŸ´ç£¼å¤±æ•—。當命令收到 fatal signal N 退出時,bash
使用 128+N 作為它的退出狀態。
如果沒有找到命令,為執行它而創建的å進程返回 127。如果找到了命令但是
檔案ä¸å¯åŸ·è¡Œï¼Œè¿”回狀態是 126。
如果命令由於擴展或咿wå‘錯誤而失敗,退出狀態大於零。
shell 內建命令如果æˆåŠŸè¿”å›ž 0(true),執行時出錯則返回éžé›¶ (false)。
所有內建命令返回 2 ä¾†æŒ‡ç¤ºä¸æ£ç¢ºçš„用法。
Bash 自赤藀^最後執行的命令的退出狀態,除éžç™¼ç”Ÿäº†èªžæ³•錯誤,
這時它返回éžé›¶ïŸ«Cåƒè¦‹ä¸‹æ‚¸æ¼±æ¾ˆå œR令 exit。
(SIGNALS)
如果 bash 是交互的,沒有è¨å®šä»»ä½•陷阱,它忽略 SIGTERM (這樣 kill 0
䏿œƒæ®ºæŽ‰äº¤äº’çš„ shell)。 SIGINT 被æ•ç²ä¸¦è™•ç† (從而使內建命令 wait
å¯ä»¥ä¸æ–·)。在所有情æ³ä¸‹ï¼Œ bash 忽略 SIGQUIT。 如果æ£åœ¨ä½¿ç”¨ä½œæ¥æŽ§åˆ¶ï¼Œ
bash 忽略 SIGTTIN, SIGTTOU, 和 SIGTSTP.
bash 開始的並行作æ¥çš„信號處ç†å¥æŸ„都è¨ç½®ç‚º shell 從父進程ä¸ç¹¼æ‰¿ çš„-
Cå¦‚æžœä¸æ˜¯æ£åœ¨ä½¿ç”¨ä½œæ¥æŽ§åˆ¶ï¼Œç•°æ¥å‘½ä»¤é‚„忽略 SIGINT å’Œ SIGQUIT C
作為命令替æ›çµæžœé‹è¡Œçš„命令忽略éµç›¤ç”¢ç”Ÿçš„ä½œæ¥æŽ§åˆ¶ä¿¡è™Ÿ SIGTTIN, SIGTTOU,
和 SIGTSTP.
如果收到信號 SIGHU A shell é è¨é€€å‡ºã€‚在退出å‰ï¼Œäº¤äº’çš„ shell
呿‰€æœ‰ä½œæ¥ï¼Œé‹è¡Œçš„æˆ–åœæ¢çš„ï¼Œç™¼é€ SIGHUP 信號。shell å‘åœæ¢çš„作æ¥ç™¼å‡º
SIGCONT 信號來ä¿è¨¼å®ƒæŠª|收到 SIGHUP. né˜»æ¢ shell
å‘特定的作æ¥ç™¼é€ä¿¡è™Ÿï¼Œæ‡‰ç•¶ä½¿ç”¨å…§å»ºå‘½ä»¤ disown 將作æ¥å¾žä½œæ¥è¡¨ä¸åˆªé™¤
(åƒè¦‹ä¸‹æ‚¸ shell O(SHELL BUILTIN COMMANDS) ç« ç¯€) 或者使用 disown
-h ä¾†æ¨™è¨˜ç‚ºä¸æŽ¥å— SIGHU C
如果使用 shopt è¨ç½®äº† shell é¸é … huponexi A 在交互的登入 shell 退出時
bash 呿‰€æœ‰ä½œæ¥ç™¼å‡º SIGHUP 信號。
ç•¶ bash ç‰å¾…å‘½ä»¤åŸ·è¡ŒçµæŸæ™‚,如果收到已è¨ç½®äº†é™·é˜±çš„信號,陷阱 (trap)
將䏿œƒåŸ·è¡Œï¼Œç›´åˆ°å‘½ä»¤çµæŸã€‚ ç•¶ bash 通éŽå…§å»ºå‘½ä»¤ wait
ç‰å¾…ç•°æ¥å‘½ä»¤æ™‚,如果收到已è¨ç½® 了陷阱的信號,將使得內建命令 wait
ç«‹å³ä»¥å¤§æ–¼ 128 的狀態藀^。 接著,陷阱將立å³è¢«åŸ·è¡Œã€‚
Job control (ä½œæ¥æŽ§åˆ¶) 指的是å¯ä»¥é¸æ“‡åœæ¢ (suspend,掛起)
進程執行,並且 å¯ä»¥åœ¨ä¹‹å¾Œç¹¼çºŒ (resume,æ¢å¾©)
執行的能力。使用者一般在交互的人機界 ä¸ä½¿ç”¨é€™ç¨®åŠŸèƒ½ã€‚ç•Œ-
惇O由系統的終端驅動和 bash å…±åŒæä¾›çš„ã€‚
shell å°‡æ¯èš¨ç‘D分é…給一 @ ~(job) C 它ä¿å˜ä¸€è™“礅eé‹è¡Œçš„作æ¥è¡¨ï¼Œå¯ä»¥ç”¨
jobs 命令來列出。當 bash 啟動一茞夾Bçš„ä½œæ¥æ™‚ (background AI ) A
它輸出這樣的一行:
[1] 25647
表明這è@æ¥çš„作æ¥è™Ÿæ˜¯ 1,與作æ¥ç›¸é—œé€£çš„管é“䏿œ€å¾Œä¸€èˆi程的 進程ID是
15647。管é“䏿‰€æœ‰é€²ç¨‹éƒ½æ˜¯åŒä¸€è@æ¥çš„æˆã€‚ Bash 使用 @ ~(job)
æ¦‚å¿µä½œç‚ºä½œæ¥æŽ§åˆ¶çš„åŸºç¤Žã€‚
ç‚ºç°¡åŒ–ä½œæ¥æŽ§åˆ¶çš„ä½¿ç”¨è€…ç•Œæ‚¸çŠ’çª¶{,作æ¥ç³»çµ±t責管ç†ã€Œç•¶å‰çµ‚端的進程組ã€
(current terminal process group ID) 的概念。這èˆiç¨‹çµ„çš„æˆ (進程組 ID
是當å‰çµ‚端進程組 ID 的進程) å¯ä»¥æ”¶åˆ°éµç›¤ç”¢ç”Ÿçš„信號,例如 SIGINT.
這些進程被稱為 foreground(å‰å°çš„)。 Background (I ) 進程是那些進程組
ID 與終端ä¸åŒçš„é€²ç¨‹ï¼›é€™äº›é€²ç¨‹ä¸æœƒæ”¶åˆ°éµç›¤ç”¢ç”Ÿçš„信號。
åªæœ‰å‰å°é€²ç¨‹å¯ä»¥å¾žçµ‚端讀或å‘終端寫。-
I景進程試圖讀/寫終端時,將收到終端驅動程å¼ç™¼é€çš„ SIGTTIN (SIGTTOU)
信號。這茷Hè™Ÿå¦‚æžœæ²’æœ‰åŠ ä»¥æ•æ‰ï¼Œå°‡æŽ›èµ·é€™èˆi程。
如果 bash é‹è¡Œå…¶ä¸Šçš„作æ¥ç³»çµ±æ”¯æŒä½œæ¥æŽ§åˆ¶ï¼Œ bash
會包å«ä½¿ç”¨å®ƒçš„è¨æ–½ã€‚在一èˆi程æ£åœ¨é‹è¡Œçš„æ™‚埡鉹J suspend _ å—符
(通常是 ^Z, Control-Z) 將使這èˆi程暫åœï¼Œå°‡æŽ§åˆ¶æ¬Šé‚„給 bash. 輸入
delayed suspend , _ å—符 (通常是 ^Y, Control-Y) 將使這-
èˆi程在試圖從終端讀å–輸入時暫åœï¼Œå°‡æŽ§åˆ¶æ¬Šé‚„給 bash.
使用者接下來å¯ä»¥æŽ§åˆ¶æ¤ä½œæ¥çš„狀態,使用 bg 命令使它在I景繼續é‹è¡Œï¼Œ fg
命令使它在å‰å°ç¹¼çºŒé‹è¡Œï¼Œæˆ– kill 命令將它殺æ»ã€‚^Z
會立å³èµ·ä½œç”¨ï¼Œä¸¦ä¸”還有使ç‰å¾…ä¸çš„ (pending)
è¼¸å‡ºå’Œè¼¸å…¥è¢«å¿½ç•¥çš„é™„åŠ å‰¯ä½œç”¨ã€‚
有很多方法來指代 shell ä¸çš„作æ¥ã€‚å—符 % å¯ä»¥å¼•入作æ¥å。編號為 n
的作æ¥å¯ä»¥ç”¨ %n
的形å¼ä¾†æŒ‡ä»£ã€‚作æ¥ä¹Ÿå¯ä»¥ç”¨å•Ÿå‹•它的å稱的å‰ç¶´ï¼Œæˆ–者命令行ä¸çš„åå—符串來指代。例如,
%ce 指代一èšïŸºæ‚¸ ce 作æ¥ã€‚如果å‰ç¶´åŒ¹é…多於一è@æ¥ï¼Œ bash å ±éŒ¯ã€‚å¦ä¸€æ–¹-
情A使用 %?ce, å¯ä»¥æŒ‡ä»£ä»»ä½•命令行ä¸åŒ…å«å—符串 ce
的作æ¥ã€‚如果åå—符串匹é…多於一è@æ¥ï¼Œ bash å ±éŒ¯ã€‚ç¬¦è™Ÿ %% å’Œ %+ 指代
shell æ„義上的 current job,當å‰ä½œæ¥ï¼Œ 也就是å‰å°è¢«æš«åœçš„æœ€å¾Œä¸€-
è@æ¥ï¼Œæˆ–者是在I景啟動的作æ¥ã€‚ previous job A e @ @ ~ å¯ä»¥ä½¿ç”¨ %-
來指代。在有關作æ¥çš„輸出信æ¯ä¸ (例如,命令 jobs
的輸出),當å‰ä½œæ¥ç¸½æ˜¯è¢«æ¨™è¨˜ç‚º +, å‰ä¸€ä½œæ¥æ¨™è¨˜ç‚º -.
簡單地給出作æ¥å,å¯ä»¥ç”¨ä¾†æŠŠå®ƒæ”¾åˆ°å‰å°ï¼š %1 是 ``fg %1''
çš„åŒç¾©è©žï¼Œå°‡ä½œæ¥ 1 從I景放到å‰å°ã€‚類似的, ``%1 &'' 在I景æ¢å¾©ä½œæ¥ 1,與
``bg %1'' ç‰åƒ¹ã€‚
ç•¶æŸè@æ¥æ”¹è®Šç‹€æ…‹æ™‚,shell ç«‹å³å¯ä»¥å¾—知。通常, bash ç‰å¾…直到n輸出一-
è‹ã„”亄躓氶Aæ‰æœƒå ±å‘Šä½œæ¥çš„ç‹€æ…‹è®ŠåŒ–ï¼Œå¾žè€Œä¸æœƒæ‰“斷其他輸出。
如果啟用了內建命令 set çš„ -b é¸é …, bash 將立å³å ±å‘Šé€™äº›è®ŠåŒ–ã€‚å° SIGCHLD
信號的陷阱將在æ¯èŒªl進程退出時執行。
å¦‚æžœåœ¨ä½œæ¥æš«åœæ™‚試圖退出 bas A shell 列å°ä¸€æ¢è¦å‘Šæ¶ˆæ¯ã€‚命令 jobs
å¯èƒ½è¢«ç”¨ä¾†æª¢æŸ¥ä½œæ¥çš„ç‹€æ…‹ã€‚å¦‚æžœå†æ¬¡è©¦åœ–退出,ä¸é–“沒有其他命令,shell
䏿œƒåˆ—å° å…¶ä»–è¦å‘Šï¼Œæš«åœçš„作æ¥å°‡çµ‚æ¢ã€‚
(PROMPTING)
在交互執行時, bash 在準備好讀入一æ¢å‘½ä»¤æ™‚顯示主æç¤ºç¬¦ PS A 在需-
n更多的輸入來完æˆä¸€æ¢å‘½ä»¤æ™‚顯示 PS C Bash
å…è¨±é€šéŽæ’å…¥ä¸€äº›åæ–œæ§“轉義的特殊å—符來定制這些æç¤ºå—符串,這些å—符被如下解釋:
\a 一 ASCII 響鈴å—符 (07)
\d æ—¥æœŸï¼Œæ ¼å¼æ˜¯ "星期 月份 æ—¥" (例如,"Tue May 26")
\D{format}
format 被傳éžçµ¦ strftime(3)ï¼Œçµæžœè¢«æ’入到æç¤ºå—符串ä¸ï¼›
空的 format å°‡ä½¿ç”¨èªžè¨€ç’°å¢ƒç‰¹å®šçš„æ™‚é–“æ ¼å¼ã€‚花括號是必需的
\e 一 ASCII 轉義å—符 (033)
\h 主機å,第一 `.' 之å‰çš„部分
\H 主機å
\j shell ç•¶å‰ç®¡ç†çš„ä½œæ¥æ•¸é‡
\l shell 的終端è¨å‚™å的基本部分
\n 新行符
\r 回車
\s shell çš„å稱, $0 的基本部分 (最後一è“袟b後悸熙﹞)
\t ç•¶å‰æ™‚間,採用 24å°æ™‚制的 HH:MM:SS æ ¼å¼
\T ç•¶å‰æ™‚間,採用 12å°æ™‚制的 HH:MM:SS æ ¼å¼
\@ ç•¶å‰æ™‚間,採用 12å°æ™‚制上åˆ/ä¸‹åˆ (am/pm) æ ¼å¼
\A ç•¶å‰æ™‚間,採用 24å°æ™‚制上åˆ/ä¸‹åˆæ ¼å¼
\u ç•¶å‰ä½¿ç”¨è€…的使用者å the username of the current user
\v bash 的版本 (例如,2.00)
\V bash çš„ç™¼è¡Œç·¨è™Ÿï¼Œç‰ˆæœ¬è™ŸåŠ è£œä¸ç´šåˆ¥ (例如,2.00.0)
\w ç•¶å‰å·¥ä½œç›®éŒ„
\W ç•¶å‰å·¥ä½œç›®éŒ„的基本部分
\! æ¤å‘½ä»¤çš„æ·å²ç·¨è™Ÿ
\# æ¤å‘½ä»¤çš„命令編號
\$ 如果有效 UID 是 0,就是 #, 其他情æ³ä¸‹æ˜¯ $
\nnn å°æ‡‰å…«é€²åˆ¶æ•¸ nnn çš„å—符
\\ 一茪炱袟b
\[ 一-
茪ㄔi列å°å—符åºåˆ—的開始,å¯ä»¥ç”¨æ–¼åœ¨æç¤ºç¬¦ä¸åµŒå…¥çµ‚端控制åºåˆ—
\] 一茪ㄔi列å°å—符åºåˆ—çš„çµæŸ
命令編號和æ·å²ç·¨è™Ÿé€šå¸¸æ˜¯ä¸åŒçš„:æ·å²ç·¨è™Ÿæ˜¯å‘½ä»¤åœ¨æ·å²åˆ—表ä¸çš„ä½ç½®ï¼Œå¯èƒ½
包å«å¾žæ·å²æª”æ¡ˆä¸æ¢å¾©çš„命令 (åƒè¦‹ä¸‹æ‚¸ HISTORY v
ç« ç¯€)ï¼Œè€Œå‘½ä»¤ç·¨è™Ÿæ˜¯ç•¶å‰ shell 會話ä¸åŸ·è¡Œçš„命令åºåˆ—ä¸ï¼Œå‘½ä»¤çš„ä½ç½®ã€‚
å—符串被解碼之後,它將進行擴展,nç¶“éŽ parameter expansion, command sub-
stitution, arithmetic expansion å’Œ quote removal, 最後nç¶“éŽ shell é¸é …
promptvars è™•ç† (åƒè¦‹ä¸‹æ‚¸ shell O(SHELL BUILTIN COMMANDS)
ç« ç¯€ä¸ï¼Œå°å‘½ä»¤ shopt çš„æz)。
readlin w(READLINE)
這是在交互 shell ä¸è™•ç†è®€å–輸入的庫,除éžåœ¨ shell 啟動時給出了
--noediting é¸é …。é è¨æƒ…æ³ä¸‹ï¼Œè¡Œç·¨è¼¯å‘½ä»¤é¡žä¼¼æ–¼ emacs
ä¸çš„那些。也å¯ä»¥ä½¿ç”¨ vi 樣å¼çš„行編輯界情C n在 shell
é‹è¡Œä¹‹å¾Œé—œé–‰è¡Œç·¨è¼¯ï¼Œä½¿ç”¨å…§ç½®å‘½ä»¤ set çš„ +o emacs 或 +o vi é¸é … (åƒè¦‹ä¸‹-
悸 shell O(SHELL BUILTIN COMMANDS) ç« ç¯€)。
Readline Notation
在這茪p節ä¸ï¼Œå°‡ä½¿ç”¨ emacs 樣å¼çš„記法來表z按éµã€‚Ctrl éµè¨˜ç‚º C-key,
例如,C-n æ„æ€æ˜¯ Ctrl-N。類似的, meta éµè¨˜ç‚º M-keyï¼Œå› æ¤ M-x æ„味著
Meta-x。(在沒有 meta éµçš„éµç›¤ä¸Šï¼ŒM-x æ„æ€æ˜¯ ESC-x,也就是說,按下 Esc
éµï¼Œç„¶å¾ŒæŒ‰ x éµã€‚這使得 Esc æˆç‚º meta prefix。M-C-x çš„çµ„åˆæ„æ€æ˜¯
Esc-Ctrl-x, 也就是按 Esc éµï¼Œç„¶å¾ŒæŒ‰ä½ Ctrl éµï¼ŒåŒæ™‚按 x éµã€‚)
readline 命令å¯ä»¥æœ‰æ•¸å—çš„ (arguments), 一般作為契_çš„p數。有些時-
唌A它是å—åƒæ•¸çš„æ¨™è¨˜ã€‚給å‘剿–¹é€²è¡Œçš„命令 (例如,kill-line) 傳éž-
tæ•¸åƒæ•¸ï¼Œå°‡ä½¿å¾—命令å‘åæ–¹å‘進行。 下-
悸漫R令如果接å—åƒæ•¸æ™‚的行為與æ¤ä¸åŒï¼Œå°‡å¦è¡Œèªªæ˜Žã€‚
當命令被æz為剪切 (killing) 文本時,被刪除的文本被ä¿å˜ï¼Œç‰å¾…將來使用
(粘貼,yanking)。被剪切的文本ä¿å˜åœ¨ kill ring ä¸ã€‚連續的剪切使得
æ–‡æœ¬è¢«ä¾æ¬¡åŠ å…¥åˆ°ä¸€èŒ¬ç’Šèˆ…ä¸‘Aå¯ä»¥ä¸€æ¬¡è¢«ç²˜è²¼ã€‚ä¸å‰ªåˆ‡æ–‡æœ¬çš„命令將 kill ring
ä¸çš„æ–‡æœ¬åˆ†é›¢ã€‚
Readline Initialization
readline å¯ä»¥é€šéŽå°‡å‘½ä»¤æ”¾å…¥åˆå§‹åŒ–檔案 (inputrc 檔案) 來定制。
檔åå¾žè®Šé‡ INPUTRC 的分簳。如果沒有è¨ç½®é€™èš¥åƒ†q,é è¨æ˜¯ ~/.inputrc.
當使用 readline
庫的程å¼å•Ÿå‹•時,將讀å–åˆå§‹åŒ–檔案,按éµé—œè¯å’Œè®Šé‡å°‡è¢«è¨ç½®ã€‚ readline
åˆå§‹åŒ–檔案ä¸åªå…è¨±æœ‰å¾ˆå°‘çš„åŸºæœ¬æ§‹é€ ã€‚ 空行被忽略。以 #
開始的行是注釋。以 $ 開始的行指示了有æ¢ä»¶çš„æ§‹é€ 。
其他行表示按éµé—œè¯å’Œè®Šé‡è¨ç½®ã€‚
é è¨çš„æŒ‰éµé—œè¯å¯ä»¥ä½¿ç”¨ inputrc 檔案改變。其他使用這è‡w的程å¼å¯ä»¥æ·»åŠ å®ƒ-
怞è‘v的命令和關è¯ã€‚
例如,將
M-Control-u: universal-argument
或
C-Meta-u: universal-argument
放入 inputrc 將使得 M-C-u 執行 readline 命令 universal-argument.
å¯ä»¥è˜åˆ¥ä¸‹åˆ—å—符的符號å稱: RUBOUT, DEL, ESC, LFD, NEWLINE, RET,
RETURN, SPC, SPACE, 和 TAB.
在命令å之外,readline å…許將按éµèˆ‡ä¸€èŒ¼r符串關è¯ï¼Œç•¶æŒ‰ä¸‹é€™-
蚆銈氶Aå°‡æ’入這茼r符串 (一è說Amacro)。
Readline Key Bindings
inputrc 檔案ä¸çš„æŽ§åˆ¶æŒ‰éµé—œè¯çš„語法éžå¸¸ç°¡å–®ã€‚需-
nçš„å…§å®¹æ˜¯å‘½ä»¤åæˆ–å®ï¼Œä»¥åŠå®ƒæ‡‰ç•¶é—œè¯åˆ°çš„æŒ‰éµåºåˆ—。
å稱å¯ä»¥ä»¥å…©ç¨®æ–¹å¼æŒ‡å®šï¼šä¸€èŒ·é¶¬éŠ‚ç†”é¡«é«¡W稱,å¯èƒ½å¸¶æœ‰ Meta- 或 Control-
å‰ç¶´ï¼Œæˆ–者是一茷鶬銣ï“C。
當使用 keyname:function-name 或 macro 形弿™‚, keyname 是按éµä»¥-
^文拼寫的å稱。例如:
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"
在上z例åä¸ï¼Œ C-u 被關è¯åˆ°å‡½æ•¸ universal-argument, M-DEL 被關è¯åˆ°å‡½æ•¸
backward-kill-word, 而 C-o 被關è¯ç‚ºé‹è¡Œå³é‚Šçµ¦å‡ºçš„å®
(æ„æ€æ˜¯ï¼Œå°‡å‘è¡Œä¸æ’å…¥ ``> output'' )。
在第二種形å¼ä¸ï¼Œ"keyseq":function-name 或 macro, keyseq ä¸åŒæ–¼ä¸Šæ‚¸
keynam A 表示整-
茷鶬銣ï“Cçš„å—符串å¯ä»¥é€šéŽå°‡æŒ‰éµåºåˆ—放在雙引號引用ä¸ä¾†æŒ‡å®šã€‚
å¯ä»¥ä½¿ç”¨ä¸€äº› GNU Emacs
樣å¼çš„æŒ‰éµåºåˆ—ï¼Œå¦‚ä¸‹ä¾‹æ‰€ç¤ºï¼Œä½†æ˜¯ä¸æœƒè˜åˆ¥æŒ‰éµçš„符號å稱。
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"
在上z例åä¸ï¼Œ C-u 被åˆä¸€æ¬¡é—œè¯åˆ°å‡½æ•¸ universal-argument. C-x C-r
被關è¯åˆ°å‡½æ•¸ re-read-init-file, 而 ESC [ 1 1 ~ 被關è¯ç‚ºæ’入文本 ``Func-
tion Key 1''.
GNU Emacs 樣å¼çš„轉義åºåˆ—的全集為:
\C- Ctrl å‰ç¶´
\M- Meta å‰ç¶´
\e 一 Esc å—符
\\ åæ–œæ§“
\" å—æƒœWçš„ "
\' å—æƒœWçš„ '
除了 GNU Emacs 樣å¼çš„轉義åºåˆ—ï¼Œé‚„æœ‰ä¸€ç³»åˆ—åæ–œæ§“轉義åºåˆ—å¯ç”¨ï¼š
\a 響鈴
\b 回退
\d 刪除
\f 進紙
\n 新行符
\r 回車
\t 水斥鶖
\v è±Žç›´è·³æ ¼
\nnn 一茪K比特å—符,它的O八進制 nnn (一到三茪K進制數å—)。
\xHH 一茪K比特å—符,它的Oåå…進制 HH (一到兩-
茪Qå…進制數å—)。
輸入å®çš„æ–‡æœ¬æ™‚ï¼Œå¿…é ˆä½¿ç”¨å–®å¼•è™Ÿæˆ–é›™å¼•è™Ÿå¼•ç”¨ä¾†è¡¨æ˜Žæ˜¯å®çš„定義。
沒有引用的文本被當作函數å。在å®çš„定義體ä¸ï¼Œä¸Šzåæ–œæ§“轉義被擴展。
åæ–œæ§“å°‡å¼•ç”¨å®æ–‡æœ¬ä¸æ‰€æœ‰å…¶ä»–å—符,包括 " å’Œ '。
Bash å…許使用內建命令 bind 來顯示和蚹儱礅e readline
按éµé—œè¯ã€‚在交互使用ä¸å¯ä»¥ç”¨å…§å»ºå‘½ä»¤ set çš„ -o é¸é …切æ›åˆ°ç·¨è¼¯æ¨¡å¼
(åƒè¦‹ä¸‹æ‚¸ shell O(SHELL BUILTIN COMMANDS) ç« ç¯€)。
Readline Variables
readline 包å«é¡å¤–çš„å¯ç”¨æ–¼å®šåˆ¶å®ƒçš„行為的變é‡ã€‚å¯ä»¥åœ¨ inputrc
檔案ä¸è¨ç½®è®Šé‡ï¼Œä½¿ç”¨å¦‚下形å¼çš„語å¥ï¼š
set variable-name value
除éžå¦å¤–說明,readline 變é‡çš„ï ‹`是 On 或 Of C 變é‡å’Œå®ƒæ€çŠ’wè¨ïŸ¶O:
bell-style (audible)
控制了當 readline 需n鳴終端響鈴時的動作。如果è¨ç½®ç‚º none, read-
line 䏿œƒé³´éˆ´ã€‚如果è¨ç½®ç‚º visible,readline
使用å¯è¦–的響鈴,如果å¯ç”¨çš„話。 如果è¨ç½®ç‚º audible,readline
試著鳴終端響鈴。
comment-begin (``#'')
這茼r符串在執行 readline 命令 insert-comment 時被æ’入。這茤R令在
emacs 模å¼ä¸‹è¢«é—œè¯ç‚º M- A 在 vi 模å¼ä¸‹æ˜¯ C
completion-ignore-case (Off)
如果è¨ç½®ç‚º On,readline 進行大å°å¯«ä¸æ•感的檔å匹é…和補全。
completion-query-items (100)
這蚥僆q決定著何時å‘使用者詢å•ï¼Œæ˜¯å¦æŸ¥çœ‹ç”±å‘½ä»¤ possible-comple-
tions 產生的å¯èƒ½çš„補全數é‡ã€‚ 它å¯ä»¥è¨ç‚ºä»»ä½•å¤§æ–¼æˆ–ç‰æ–¼ 0 çš„-
C如果å¯èƒ½çš„補全數é‡å¤§æ–¼æˆ–ç‰æ–¼é€™èš¥åƒ†q的A
使用者將被æç¤ºæ˜¯å¦é¡˜æ„查看它怴Få¦å‰‡å°‡ç›´æŽ¥åœ¨çµ‚端上列出它怴C
convert-meta (On)
如果è¨ç½®ç‚º On,readline 將把è¨ç½®äº†æœ€é«˜ä½çš„å—符轉æ›ç‚º ASCII
按éµåºåˆ—,方法是 去掉第八ä½ï¼Œå‰ç¶´ä¸€èš‹é‰Šqå—符 (實際上,使用 Esc
作為轉義符 meta prefix)。
disable-completion (Off)
如果è¨ç½®ç‚º On,readline
å°‡ç¦æ¢è©žçš„補全。補全å—符將被æ’入到行ä¸ï¼Œå°±å¥½åƒå®ƒæŠQ æ˜ å°„ç‚º self-
insert。
editing-mode (emacs)
控制 readline 的按éµé—œè¯é›†åˆèˆ‡ emacs 還是 vi 相似。 editing-mode
å¯ä»¥è¨ç½®ç‚º emacs 或 v C
enable-keypad (Off)
如果è¨ç½®ç‚º On ,readline 在調用時將試圖啟用輔助éµç›¤ã€‚
一些系統需nè¨ç½®é€™èŒ–è“狴峇閬Véµã€‚
expand-tilde (Off)
如果è¨ç½®ç‚º On,readline 試圖進行詞的補全時會進行波浪線擴展。
history-preserve-point
如果è¨ç½®ç‚º On,æ·å²ä»£ç¢¼è©¦è‘—在 previous-history 或 next-history
å–回的æ¯èšžå²è¡Œçš„相åŒä½ç½®ä¸åŠ é»žã€‚
horizontal-scroll-mode (Off)
如果è¨ç½®ç‚º On,將使得 readline 使用單行來顯示,如果它比螢幕寬度-
n長,就在 單一的螢幕行上水朮uå‹•è¼¸å…¥è¡Œï¼Œè€Œä¸æ˜¯è‡ªå‹•回繞到新行。
input-meta (Off)
如果è¨ç½®ç‚º On,readline å°‡å…許八比特輸入
(ä¹Ÿå°±æ˜¯èªªï¼Œå®ƒä¸æœƒå°‡å®ƒè®€å…¥çš„å—ç¬¦ä¸æœ€é«˜ä½åˆªé™¤),
ä¸ç®¡å®ƒèƒ½æ”¯æŒä»€éº¼æ¨£çš„終端n求。å稱 meta-flag 與æ¤è®Šé‡åŒç¾©ã€‚
isearch-terminators (``C-[C-J'')
用於終æ¢å¢žé‡çš„æœç´¢ï¼Œä¸å†å°‡å—符當作命令執行的å—符串。 如果這-
蚥僆q沒有賦Aå—符串 Esc å’Œ C-J 將終æ¢å¢žé‡çš„æœç´¢ã€‚
keymap (emacs)
è¨ç½®ç•¶å‰ readline éµç›¤æ˜ 射。有效的éµç›¤æ˜ å°„å稱是 emacs,
emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command,還有
vi-insert C vi ç‰åƒ¹æ–¼ vi-command; emacs ç‰åƒ¹æ–¼
emacs-standard。é è¨ïŸ¶O emacs; editing-mode çš„-
]會影響é è¨çš„éµç›¤æ˜ 射。
mark-directories (On)
如果è¨ç½®ç‚º Onï¼Œè£œå…¨çš„ç›®éŒ„åæœƒæ·»åР䏀è“袟b。
mark-modified-lines (Off)
如果è¨ç½®ç‚º On,已被蚹麊瑣å²è¡Œå°‡é¡¯ç¤ºç‚ºå‰ç¶´ä¸€èŒ¯P號 (*)。
mark-symlinked-directories (Off)
如果è¨ç½®ç‚º On,補全的åç¨±å¦‚æžœæ˜¯åˆ°ç›®éŒ„çš„ç¬¦è™ŸéˆæŽ¥ï¼Œå‰‡å°‡æ·»åŠ ä¸€è“袟b
(與 mark-directories 的P樣處ç†)。
match-hidden-files (On)
這蚥僆q,如果è¨ç½®ç‚º On,將使得 readline 在進行檔å補全時,匹é…以
`.' é–‹é 的檔案 (éš±è—æª”案), 除éžä½¿ç”¨è€…在-
n補全的檔åä¸çµ¦å‡ºäº†å‰å°Žçš„ `.'。
output-meta (Off)
如果è¨ç½®ç‚º On,readline
將直接顯示è¨ç½®äº†ç¬¬å…«ä½çš„å—ç¬¦ï¼Œè€Œä¸æ˜¯è½‰åŒ–為一è“a meta
å‰ç¶´çš„轉義åºåˆ—。
page-completions (On)
如果è¨ç½®ç‚º On,readline 將使用內建的類似 more çš„åˆ†é …{å¼ï¼Œ
ä¾†æ¯æ¬¡é¡¯ç¤ºä¸€å±å¯èƒ½çš„補全。
print-completions-horizontally (Off)
如果è¨ç½®ç‚º On,readline 將匹é…çš„è£œå…¨æŒ‰å—æ¯è¡¨é †åºæŽ’åºï¼Œç„¶å¾Œæ°´-
排列顯示出來, è€Œä¸æ˜¯åœ¨èž¢å¹•上豎直排列顯示。
show-all-if-ambiguous (Off)
這將調整補全函數的é è¨è¡Œç‚ºã€‚如果è¨ç½®ç‚º on, æ“æœ‰å¤šæ–¼ä¸€-
茈i能的補全的詞將立å³åˆ—出所有匹é…ï¼Œè€Œä¸æ˜¯é³´éŸ¿éˆ´ã€‚
visible-stats (Off)
如果è¨ç½®ç‚º On,在列出å¯èƒ½çš„補全時,將在檔å後æ²KåŠ ä¸€-
èŒ ç£³å‚±ä»µè¢“åž‹çš„å—符, 檔案類型由 stat(2) å ±å‘Šã€‚
Readline Conditional Constructs
readline 實ç¾äº†ä¸€ç¨®åŠŸèƒ½ï¼Œæœ¬è³ªä¸Šèˆ‡ C é 處ç†å™¨é€²è¡Œæ¢ä»¶ç·¨è¯çš„功能類似,
å…è¨±æ ¹æ“šæ¸¬è©¦çš„çµæžœé€²è¡Œéµç›¤é—œè¯å’Œè®Šé‡è¨ç½®ã€‚å…¶ä¸ä½¿ç”¨äº†å››ç¨®è§£é‡‹å™¨æŒ‡ä»¤ã€‚
$if $if çµæ§‹å…è¨±æ ¹æ“šç·¨è¼¯æ¨¡å¼ï¼Œæ£åœ¨ä½¿ç”¨çš„終端,使用 readline
的應用程å¼ä¾†è¨å®šæŒ‰éµé—œè¯ã€‚
測試的文本包括一行,直到行尾;ä¸å¿…用å—符來隔離它。
mode $if çµæ§‹çš„ mode= å½¢å¼ç”¨æ–¼æ¸¬è©¦ readline 處於 emacs 還是 vi
模å¼ã€‚ 這å¯ä»¥èˆ‡å‘½ä»¤ set keymap çµåˆä½¿ç”¨ï¼Œä¾‹å¦‚,è¨ç½®
emacs-standard å’Œ emacs-ctlx éµç›¤æ˜ 射,僅當 readline 以
emacs 模å¼å•Ÿå‹•。
term term=
å½¢å¼ç”¨æ–¼åŒ…å«èˆ‡çµ‚端相關的按éµé—œè¯ï¼Œä¹Ÿè¨±æ˜¯å°‡æŒ‰éµåºåˆ—輸出與終端的功能éµç›¸é—œè¯ã€‚
ç‰è™Ÿ = å³é‚Šçš„詞被åŒçµ‚端的全åå’Œå稱ä¸ç¬¬ä¸€ - å‰-
悸漱@部分相比較。 例如,å…許 sun åŒæ™‚åŒ¹é… sun å’Œ
sun-cmd C
application
application çµæ§‹ç”¨æ–¼åŒ…嫿‡‰ç”¨ç¨‹å¼ç›¸é—œçš„è¨ç½®ã€‚æ¯èŒ–æ´ read-
line 的程å¼éƒ½è¨ç½® application name,
åˆå§‹åŒ–檔案å¯ä»¥æ¸¬è©¦å®ƒçš„C它å¯ç”¨æ–¼å°‡ä¸€-
茷鶬銣ï“C與å°ç‰¹å®šçš„ç¨‹å¼æœ‰ç”¨çš„功能相關è¯ã€‚
ä¾‹å¦‚ï¼Œä¸‹åˆ—å‘½ä»¤æ·»åŠ äº†ä¸€èŒ·é¶¬éŠ£ï“C,用以引用 bash
ä¸ç•¶å‰çš„詞或å‰ä¸€èŒ§
$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
$endif 上例ä¸çš„這茤Rä»¤ï¼ŒçµæŸäº†ä¸€ $if 命令。
$else 如果測試失敗,$if 指令ä¸é€™èŒªå£‘銂漫R令將被執行。
$include
這茷令使用單-
蚗犰Wä½œç‚ºåƒæ•¸ï¼Œå¾žæª”案ä¸è®€å–命令和按éµé—œè¯ã€‚例如,下列指令 將讀å–
/etc/inputrc:
$include /etc/inputrc
Searching
readline æä¾›äº†å¾žå‘½ä»¤æ·å²ä¸æœç´¢åŒ…å«çµ¦å®šå—符串的行的命令 (åƒè¦‹ä¸‹æ‚¸ HIS-
TORY v ç« ç¯€)。有兩種æœç´¢æ¨¡å¼ï¼š incremental å’Œ non-incremental.
增é‡çš„æœç´¢åœ¨ä½¿ç”¨è€…çµæŸè¼¸å…¥æœç´¢å—符串時開始。在æœç´¢å—符串的æ¯-
茼rç¬¦è¢«è¼¸å…¥çš„åŒæ™‚, readline 顯示與已輸入的å—符串匹é…çš„ä¸‹ä¸€èšžå²æ¢ç›®ã€‚
增é‡çš„æœç´¢åªn求輸入能找到期望的æ·å²æ¢ç›®æ‰€éœ€çš„那麼多å—符。 isearch-ter-
minators 變é‡ä¸çš„å—符用來終æ¢ä¸€æ¬¡å¢žé‡çš„æœç´¢ã€‚å¦‚æžœ 這蚥僆q沒有被賦AEsc
å’Œ Ctrl-J å—ç¬¦ä¸²å°‡çµæŸä¸€æ¬¡å¢žé‡çš„æœç´¢ã€‚ Ctrl-G
將喿¶ˆä¸€æ¬¡å¢žé‡çš„æœç´¢ï¼Œæ¢å¾©åˆå§‹çš„行。當æœç´¢çµ‚æ¢æ™‚ï¼ŒåŒ…å«æœç´¢å—符串
çš„æ·å²æ¢ç›®æˆç‚ºç•¶å‰è¡Œã€‚
n從æ·å²åˆ—è¡¨ä¸æ‰¾åˆ°å…¶ä»–匹é…çš„æ¢ç›®ï¼Œé©ç•¶åœ°éµå…¥ Ctrl-S 或 Ctrl-R。
這樣將在æ·å²ä¸å‘å‰/å‘後æœç´¢ä¸‹ä¸€èŒªït已輸入的æœç´¢å—符串的æ¢ç›®ã€‚
å…¶ä»–é—œè¯åˆ°æŸ readline 命令的按éµåºåˆ—å°‡çµ‚æ¢æœç´¢ä¸¦åŸ·è¡Œé—œè¯çš„命令。
例如,newline å°‡çµ‚æ¢æœç´¢ï¼ŒæŽ¥å—ç•¶å‰è¡Œï¼Œå¾žè€ŒåŸ·è¡Œæ·å²åˆ—表ä¸çš„命令。
readline å¯ä»¥è¨˜ä½ä¸Šæ¬¡å¢žé‡æœç´¢çš„å—符串。如果éµå…¥å…©æ¬¡ Ctrl-R,ä¸é–“沒有
輸入任何å—符來定義一虓sçš„æœç´¢å—符串,那麼將使用已記ä½çš„æœç´¢å—符串。
éžå¢žé‡çš„æœç´¢å°‡æ•´è™“jç´¢å—符串讀入,然後æ‰é–‹å§‹æœç´¢åŒ¹é…çš„æ·å²æ¢ç›®ã€‚
æœç´¢å—符串å¯ä»¥ç”±ä½¿ç”¨è€…輸入,或者是當å‰è¡Œçš„內容的一部分。
Readline Command Names
下惘C出的是命令的å稱以åŠé è¨æƒ…æ³ä¸‹å®ƒæ–»é¶¬p的按éµåºåˆ—。
命令åç¨±å¦‚æžœæ²’æœ‰å°æ‡‰çš„æŒ‰éµåºåˆ—,那麼é è¨æ˜¯æ²’有關è¯çš„。在下列æzä¸ï¼Œ 點
(point) æŒ‡ç•¶å‰æ¸¸æ¨™ä½ç½®ï¼Œæ¨™è¨˜ (mark) 指命令 set-mark
ä¿å˜çš„æ¸¸æ¨™ä½ç½®ã€‚point å’Œ mark 之間的文本被稱為Såœ (region)。
Commands for Moving å‹•
beginning-of-line (C-a)
移動到當å‰è¡Œçš„開始。
end-of-line (C-e)
移動到當å‰è¡Œçš„çµå°¾ã€‚
forward-char (C-f)
å‘å‰ç§»å‹•一å—。
backward-char (C-b)
å‘後移動一å—。
forward-word (M-f)
å‘å‰ç§»å‹•到下一詞尾。詞由å—符 (å—æ¯å’Œæ•¸å—) 組æˆã€‚
backward-word (M-b)
å‘å¾Œç§»å‹•åˆ°ç•¶å‰æˆ–上一詞滿C
clear-screen (C-l)
清除螢幕,ä¿ç•™ç•¶å‰è¡Œåœ¨èž¢å¹•é ‚ç«¯ã€‚æœ‰åƒæ•¸æ™‚,刷新當å‰è¡Œï¼Œä¸æ¸…å±ã€‚
redraw-current-line
刷新當å‰è¡Œã€‚
Commands for Manipulating the History
accept-line (Newline, Return)
接å—這一行,ä¸ç®¡æ¸¸æ¨™åœ¨ä»€éº¼ä½ç½®ã€‚如果行éžç©ºï¼Œå°‡æ ¹æ“šè®Šé‡ HISTCON-
TROL çš„ç‹€æ…‹åŠ å…¥åˆ°æ·å²åˆ—表ä¸ã€‚如果行是-
蚹儮Lçš„æ·å²è¡Œï¼Œå°‡æ¢å¾©è©²æ·å²è¡Œåˆ°åˆå§‹ç‹€æ…‹ã€‚
previous-history (C-p)
從æ·å²åˆ—表ä¸å–å¾—å‰ä¸€èŒ¤R令,從列表ä¸å‘後移動。
next-history (C-n)
從æ·å²åˆ—表ä¸å–得後一茤R令,從列表ä¸å‘å‰ç§»å‹•。
beginning-of-history (M-<)
移動到æ·å²ä¸çš„第一行。
end-of-history (M->)
移動到輸入æ·å²è¡Œçš„æœ«å°¾ï¼Œä¹Ÿå°±æ˜¯ç•¶å‰è¼¸å…¥çš„行的末尾。
reverse-search-history (C-r)
從當å‰è¡Œé–‹å§‹å‘後æœç´¢ï¼ŒæŒ‰ç…§éœ€n在æ·å²ä¸å‘「上ã€ç§»å‹•。這是一-
èšWé‡çš„æœç´¢ã€‚
forward-search-history (C-s)
從當å‰è¡Œé–‹å§‹å‘剿œç´¢ï¼ŒæŒ‰ç…§éœ€n在æ·å²ä¸å‘「下ã€ç§»å‹•。這是一-
èšWé‡çš„æœç´¢ã€‚
non-incremental-reverse-search-history (M-p)
從當å‰è¡Œé–‹å§‹å‘後,使用éžå¢žé‡æœç´¢ä¾†æŸ¥æ‰¾ä½¿ç”¨è€…給出的å—符串。
non-incremental-forward-search-history (M-n)
從當å‰è¡Œé–‹å§‹å‘å‰ï¼Œä½¿ç”¨éžå¢žé‡æœç´¢ä¾†æŸ¥æ‰¾ä½¿ç”¨è€…給出的å—符串。
history-search-forward
從當å‰è¡Œé–‹å§‹å‘剿œç´¢æ·å²ï¼ŒæŸ¥æ‰¾å¾žç•¶å‰è¡Œæ¼• point 之間的å—符串。
這是一茷D增é‡çš„æœç´¢ã€‚
history-search-backward
從當å‰è¡Œé–‹å§‹å‘後æœç´¢æ·å²ï¼ŒæŸ¥æ‰¾å¾žç•¶å‰è¡Œæ¼• point 之間的å—符串。
這是一茷D增é‡çš„æœç´¢ã€‚
yank-nth-arg (M-C-y)
å°‡å‰ä¸€èŒ¤Rä»¤çš„ç¬¬ä¸€èŒæŠ (通常是上一行的第二茧) æ’入到 point
ä½ç½®ã€‚æœ‰åƒæ•¸ n 時,將å‰ä¸€èŒ¤R令的第 n 茧 (å‰ä¸€èŒ¤R令ä¸çš„詞從 0
é–‹å§‹p數) æ’入到 point ä½ç½®ã€‚tæ•¸åƒæ•¸å‰‡æ’å…¥å‰ä¸€èŒ¤R令佷 n 茧。
yank-last-arg (M-., M-_)
æ’å…¥å‰ä¸€èŒ¤Rä»¤çš„æœ€å¾Œä¸€èŒæŠ (上一æ·å²æ¢ç›®çš„æœ€å¾Œä¸€èŒ§)ã€‚æœ‰åƒæ•¸æ™‚,
行為類似於 yank-nth-arg。後繼的 yank-last-arg 調用將
從æ·å²åˆ—表ä¸å‘å¾Œç§»å‹•ï¼Œä¾æ¬¡å°‡æ¯è¡Œçš„æœ€å¾Œä¸€èŒæŠï›„﹞J。
shell-expand-line (M-C-e)
æ“´å±•è¡Œï¼Œåƒ shell åšçš„那樣。其ä¸åŒ…å«åˆ¥åå’Œæ·å²æ“´å±•,還有所有的
shell 詞的擴展。 åƒè¦‹ä¸‹æ‚¸ HISTORY EXPANSION ä¸é—œæ–¼æ·å²æ“´å±•çš„æ-
z。
history-expand-line (M-^)
在當å‰è¡Œé€²è¡Œæ·å²æ“´å±•。åƒè¦‹ä¸‹æ‚¸ HISTORY EXPANSION
ä¸é—œæ–¼æ·å²æ“´å±•çš„æz。
magic-space
在當å‰è¡Œé€²è¡Œæ·å²æ“´å±•,並æ’å…¥ä¸€èŒ èº“ç¢Cåƒè¦‹ä¸‹æ‚¸ HISTORY EXPANSION
ä¸é—œæ–¼æ·å²æ“´å±•çš„æz。
alias-expand-line
在當å‰è¡Œé€²è¡Œåˆ¥å擴展,åƒè¦‹ä¸Šæ‚¸ ALIASES ä¸é—œæ–¼åˆ¥å擴展的æz。
history-and-alias-expand-line
在當å‰è¡Œé€²è¡Œæ·å²å’Œåˆ¥å擴展。
insert-last-argument (M-., M-_)
與 yank-last-arg åŒç¾©ã€‚
operate-and-get-next (C-o)
接å—ç•¶å‰è¡Œï¼ŒåŠ ä»¥åŸ·è¡Œï¼Œå¾žæ·å²ä¸å–出相å°ç•¶å‰è¡Œçš„下一行進行編輯。
ä»»ä½•åƒæ•¸éƒ½è¢«å¿½ç•¥ã€‚
edit-and-execute-command (C-xC-e)
啟動一蚑s輯器,編輯當å‰å‘½ä»¤è¡Œï¼Œå°‡çµæžœä½œç‚º shell 命令é‹è¡Œã€‚ Bash
將便¬¡è©¦è‘—é‹è¡Œ $FCEDIT, $EDITOR, å’Œ emacs 作為編輯器。
Commands for Changing Text 本
delete-char (C-d)
刪除 point 處的å—符。如果 point 在行-
滿Aè¡Œä¸æ²’有å—符,最後一次輸入的å—符 沒有被關è¯åˆ°
delete-char,將返回 EOF.
backward-delete-char (Rubout)
刪除游標之後的å—符。當給出一èšï›˜çš„åƒæ•¸æ™‚,ä¿å˜åˆªé™¤çš„æ–‡æœ¬åˆ° kill
ring ä¸ã€‚
forward-backward-delete-char
刪除游標下的å—ç¬¦ï¼Œé™¤éžæ¸¸æ¨™åœ¨è¡Œå°¾ï¼Œæ¤æ™‚刪除游標後的å—符。
quoted-insert (C-q, C-v)
將輸入的下一å—ç¬¦ä¿æŒå„¤ä¾˜KåŠ åˆ°è¡Œä¸ã€‚例如,å¯ä»¥ç”¨å®ƒä¾†æ’入類似 C-q
çš„å—符。
tab-insert (C-v TAB)
æ’入一虒鶖ç˜é¡«é£½C
self-insert (a, b, A, 1, !, ...)
æ’å…¥éµå…¥çš„å—符。
transpose-chars (C-t)
å°‡ point 之å‰çš„å—符å‘å‰ç§»å‹•ï¼Œè¶ŠéŽ point 處的å—ç¬¦ï¼ŒåŒæ™‚也改變
point çš„ä½ç½®ã€‚ 如果 point åœ¨è¡Œå°¾ï¼Œå°‡èª¿æ› point 之å‰çš„兩茼r符。-
tæ•¸åƒæ•¸æ²’有作用。
transpose-words (M-t)
å°‡ point 之å‰çš„詞å‘å‰ç§»å‹•ï¼Œè¶ŠéŽ point è™•çš„è©žï¼ŒåŒæ™‚也改變 point
çš„ä½ç½®ã€‚ 如果 point 在行尾,將調æ›è¡Œä¸çš„æœ€å¾Œå…©èŒ§ã€‚
upcase-word (M-u)
å°‡ç•¶å‰ (或下一) 詞變æˆå…¨å¤§å¯«ã€‚有t滌æŠï𾿰¶Aå°‡å‰ä¸€èŒ§è®Šç‚ºå¤§å¯«ï¼Œ
但是ä¸ç§»å‹• point。
downcase-word (M-l)
å°‡ç•¶å‰ (或下一) 詞變æˆå…¨å°å¯«ã€‚有t滌æŠï𾿰¶Aå°‡å‰ä¸€èŒ§è®Šç‚ºå°å¯«ï¼Œ
但是ä¸ç§»å‹• point。
capitalize-word (M-c)
å°‡ç•¶å‰ (或下一) 詞變為漲r大寫。有t滌æŠï𾿰¶Aå°‡å‰ä¸€èŒ§è®Šç‚º-
æ¼²r大寫, 但是ä¸ç§»å‹• point。
overwrite-mode
控制æ’å…¥/改寫模å¼ã€‚給出一茈蕪蒱æŠï𾿰¶A切æ›ç‚ºæ”¹å¯«æ¨¡å¼ã€‚給出一-
茷Dæ£æ•¸ åƒæ•¸æ™‚,切æ›ç‚ºæ’入模å¼ã€‚這茤R令åªå½±éŸ¿ emacs 模å¼ï¼›vi
æ¨¡å¼ çš„æ”¹å¯«èˆ‡æ¤ä¸åŒã€‚æ¯èš¢ readline()
的調用都以æ’入模å¼é–‹å§‹ã€‚在改寫模å¼ä¸‹ï¼Œ é—œè¯åˆ° self-insert
çš„å—ç¬¦æ›¿æ› point 處的å—ç¬¦ï¼Œè€Œä¸æ˜¯å°‡å®ƒæŽ¨åˆ°å³é‚Šã€‚ é—œè¯åˆ° back-
ward-delete-char çš„å—ç¬¦ä»¥ç©ºæ ¼æ›¿æ› point å‰çš„å—符。
é è¨æƒ…æ³ä¸‹ï¼Œé€™èŒ¤R令沒有關è¯ã€‚
Killing and Yanking K
kill-line (C-k)
剪切從 point 到行尾的文本。
backward-kill-line (C-x Rubout)
åå‘剪切到行滿C
unix-line-discard (C-u)
åå‘剪切到行滿C與 backward-kill-line 沒有什麼å€åˆ¥ã€‚
剪切的文本被ä¿å˜æ–¼ kill-ring ä¸ã€‚
kill-whole-line
剪切當å‰è¡Œä¸æ‰€æœ‰å—符,ä¸ç®¡ point 在什麼ä½ç½®ã€‚
kill-word (M-d)
剪切從 point 到當å‰è©žå°¾ï¼Œæˆ–者如果 point
在詞之間,那麼剪切到下一詞尾。
backward-kill-word (M-Rubout)
剪切 point 之後的詞。詞的邊界與 backward-word 使用的相åŒã€‚
unix-word-rubout (C-w)
剪切 point 之後的詞,使用空白作為詞的邊界。剪切的文本被ä¿å˜æ–¼
kill-ring ä¸ã€‚
delete-horizontal-space (M-\)
刪除 point å…©é‚Šçš„æ‰€æœ‰ç©ºæ ¼å’Œè·³æ ¼ã€‚
kill-region
å‰ªåˆ‡ç•¶å‰ region 的文本。
copy-region-as-kill
å°‡ region 的文本複製到剪切緩沖å€ä¸ã€‚
copy-backward-word
å°‡ point 剿‚¸ç†Šè¤‡è£½åˆ°å‰ªåˆ‡ç·©æ²–å€ä¸ã€‚ 詞的邊界與 backward-word
使用的相åŒã€‚
copy-forward-word
å°‡ point 之後的詞複製到剪切緩沖å€ä¸ã€‚ 詞的邊界與 backward-word
使用的相åŒã€‚
yank (C-y)
å°‡ kill-ring é ‚éƒ¨çš„å…§å®¹ç²˜è²¼åˆ° point 處的緩沖å€ä¸
yank-pop (M-y)
輪轉 kill-ringï¼Œç²˜è²¼æ–°çš„é ‚éƒ¨å…§å®¹ã€‚åªèƒ½åœ¨ yank 或 yank-pop
之後使用。
Numeric Arguments
digit-argument (M-0, M-1, ..., M--)
將這èšïš¶råŠ å…¥å·²æœ‰çš„ (already accumulating)
åƒæ•¸ä¸ï¼Œæˆ–è€…é–‹å§‹æ–°çš„åƒæ•¸ã€‚ M-- 開始一è_å®šçš„åƒæ•¸ã€‚
universal-argument
é€™æ˜¯æŒ‡å®šåƒæ•¸çš„å¦ä¸€ç¨®æ–¹æ³•。如果這茤R令後掘繺è‘@茤峖hèšïš¶r,
å¯èƒ½é‚„包å«å‰å°Žçš„-
t號,這些數å—å®šç¾©äº†åƒæ•¸ã€‚如果命令之後跟隨著數å—ï¼Œå†æ¬¡åŸ·è¡Œ uni-
versal-argument
å°‡çµæŸæ•¸å—åƒæ•¸ï¼Œä½†æ˜¯å…¶ä»–情æ³ä¸‹è¢«å¿½ç•¥ã€‚有一種特殊情æ³ï¼Œå¦‚果命令之後緊接著
一茖禱Dæ•¸å—æˆ–t號的å—ç¬¦ï¼Œä¸‹ä¸€å‘½ä»¤çš„åƒæ•¸p數將憧H 4。 åƒæ•¸p數åˆå§‹æ˜¯
1ï¼Œå› æ¤ç¬¬ä¸€æ¬¡åŸ·è¡Œé€™èŒ–è»ïš±Aä½¿å¾—åƒæ•¸p數為 4, ç¬¬äºŒæ¬¡åŸ·è¡Œä½¿å¾—åƒæ•¸-
p數為 16,以æ¤é¡žæŽ¨ã€‚
Completing å…¨
complete (TAB)
è©¦è‘—å° point 之å‰çš„æ–‡æœ¬é€²è¡Œè£œå…¨ã€‚ Bash 便¬¡è©¦è‘—將文本作為一蚥僆q
(如果文本以 $ é–‹å§‹),一茖æ´å³ˆæ€žW (如果文本以 ~ é–‹å§‹),主機å
(如果文本以 @ é–‹å§‹),或者命令 (以åŠåˆ¥å和函數)
來補全。如果這些都沒有匹é…,將嘗試檔å補全。
possible-completions (M-?)
列出 point 之å‰çš„æ–‡æœ¬å¯èƒ½çš„補全。
insert-completions (M-*)
æ’å…¥ possible-completions 已產生的 point 之å‰çš„æ–‡æœ¬æ‰€æœ‰çš„補全。
menu-complete
與 complete 相似,但是使用å¯èƒ½çš„補全列表ä¸çš„æŸèŒªït替æ›-
n補全的詞。 契_執行 menu-complete 將鿷å¯èƒ½çš„補全列表,æ’å…¥æ¯-
茪ït。 到é”補全列表的çµå°¾æ™‚,鳴終端響鈴 (按照 bell-style
çš„è¨ç½®ä¾†åš) 並æ¢å¾©åˆå§‹çš„æ–‡æœ¬ã€‚ åƒæ•¸ n 將在匹é…列表ä¸å‘å‰ç§»å‹• n
æ¥ï¼›tæ•¸åƒæ•¸å¯ä»¥ç”¨æ–¼åœ¨åˆ—表ä¸å‘後移動。 這茤R令應當與 TAB
éµé—œè¯ï¼Œä½†æ˜¯é è¨æƒ…æ³ä¸‹æ˜¯æ²’有關è¯çš„。
delete-char-or-list
刪除游標下的å—ç¬¦ï¼Œå¦‚æžœä¸æ˜¯åœ¨è¡Œæ¼«å³–瑽 (類似 delete-char)。
如果在行尾,行為與 possible-completions 一P。 這-
茤R令é è¨æ²’有關è¯ã€‚
complete-filename (M-/)
å˜—è©¦å° point 之å‰çš„æ–‡æœ¬é€²è¡Œæª”å補全。
possible-filename-completions (C-x /)
列出 point 之å‰çš„æ–‡æœ¬å¯èƒ½çš„補全,將它視為檔å。
complete-username (M-~)
å˜—è©¦å° point 之å‰çš„æ–‡æœ¬é€²è¡Œè£œå…¨ï¼Œå°‡å®ƒè¦–為使用者å。
possible-username-completions (C-x ~)
列出 point 之å‰çš„æ–‡æœ¬å¯èƒ½çš„補全,將它視為使用者å。
complete-variable (M-$)
å˜—è©¦å° point 之å‰çš„æ–‡æœ¬é€²è¡Œè£œå…¨ï¼Œå°‡å®ƒè¦–為 shell 變é‡ã€‚
possible-variable-completions (C-x $)
列出 point 之å‰çš„æ–‡æœ¬å¯èƒ½çš„補全,將它視為 shell 變é‡ã€‚
complete-hostname (M-@)
å˜—è©¦å° point 之å‰çš„æ–‡æœ¬é€²è¡Œè£œå…¨ï¼Œå°‡å®ƒè¦–為主機å。
possible-hostname-completions (C-x @)
列出 point 之å‰çš„æ–‡æœ¬å¯èƒ½çš„補全,將它視為主機å。
complete-command (M-!)
å˜—è©¦å° point
之å‰çš„æ–‡æœ¬é€²è¡Œè£œå…¨ï¼Œå°‡å®ƒè¦–為命令åã€‚å‘½ä»¤è£œå…¨å˜—è©¦è‘—å°‡æ¤æ–‡æœ¬
便¬¡èˆ‡åˆ¥å,ä¿ç•™å—,shell 函數,shell
內建命令,最後是å¯åŸ·è¡Œæª”å進行匹é…。
possible-command-completions (C-x !)
列出 point 之å‰çš„æ–‡æœ¬å¯èƒ½çš„補全,將它視為命令å。
dynamic-complete-history (M-TAB)
å˜—è©¦å° point
之å‰çš„æ–‡æœ¬é€²è¡Œè£œå…¨ï¼Œå°‡æ¤æ–‡æœ¬èˆ‡æ·å²åˆ—表ä¸çš„行相比較來查找å¯èƒ½çš„補全匹é…。
complete-into-braces (M-{)
進行檔å補全,將å¯èƒ½çš„è£œå…¨åˆ—è¡¨æ”¾åœ¨èŠ±æ‹¬è™Ÿä¸æ’入,使得列表å¯ä»¥è¢«
shell 使用 (åƒè¦‹ä¸Šæ‚¸ Brace Expansion 花括號擴展)。
Keyboard Macroså®
start-kbd-macro (C-x ()
é–‹å§‹ä¿å˜è¼¸å…¥å—符為當å‰éµç›¤å®ã€‚
end-kbd-macro (C-x ))
åœæ¢ä¿å˜è¼¸å…¥å—符為當å‰éµç›¤å®ï¼Œä¿å˜å®å®šç¾©ã€‚
call-last-kbd-macro (C-x e)
å¥s執行上次定義的éµç›¤å®ï¼Œå³é¡¯ç¤ºå‡ºå®ä¸çš„å—符,好åƒå®ƒ-
怓O從éµç›¤è¼¸å…¥çš„一樣。
Miscellaneous
re-read-init-file (C-x C-r)
讀入 inputrc 檔案的內容,åˆä¸¦å…¶ä¸çš„æŒ‰éµé—œè¯å’Œè®Šé‡è³¦ïŸ«C
abort (C-g)
å–æ¶ˆç•¶å‰ç·¨è¼¯å‘½ä»¤ï¼Œé³´çµ‚端響鈴 (按照 bell-style çš„è¨ç½®ä¾†åš)。
do-uppercase-version (M-a, M-b, M-x, ...)
如果有 Meta å‰ç¶´çš„å—符 x
是å°å¯«çš„ï¼Œé‚£éº¼èˆ‡å‘½ä»¤ç›¸é—œé€£çš„æ˜¯å°æ‡‰çš„大寫å—符。
prefix-meta (ESC)
將輸入的下一茼rç¬¦åŠ ä¸Š Meta å‰ç¶´ã€‚ ESC f ç‰åƒ¹æ–¼ Meta-f.
undo (C-_, C-x C-u)
增é‡çš„æ’¤éŠ·ï¼Œåˆ†åˆ¥è¨˜ä½æ¯ä¸€è¡Œã€‚
revert-line (M-r)
撤銷這一行的所有蚹鵅C這與執行命令 undo
è¶³å¤ å¤šæ¬¡çš„æ•ˆæžœç›¸åŒï¼Œå°‡é€™ä¸€è¡Œæ¢å¾©åˆ°åˆå§‹ç‹€æ…‹ã€‚
tilde-expand (M-&)
å°ç•¶å‰è©žé€²è¡Œæ³¢æµªç·šæ“´å±•。
set-mark (C-@, M-<space>)
在 point 處è¨ç½® mark。如果給出了數滌æŠïš±A標記被è¨ç½®åˆ°é‚£èŒ¼é¼½m。
exchange-point-and-mark (C-x C-x)
äº¤æ› point å’Œ
markã€‚ç•¶å‰æ¸¸æ¨™ä½ç½®è¢«è¨ç½®ç‚ºä¿å˜çš„ä½ç½®ï¼ŒèˆŠæ¸¸æ¨™ä½ç½®è¢«ä¿å˜ç‚º mark。
character-search (C-])
讀入一茼r符,point 移動到這茼r符下一次出ç¾çš„地方。t數將æœç´¢ä¸Šä¸€-
茈Xç¾ã€‚
character-search-backward (M-C-])
讀入一茼r符,point 移動到這茼r符上一次出ç¾çš„地方。t數將æœç´¢ä¸‹-
悸漸Xç¾ã€‚
insert-comment (M-#)
沒有數滌æŠï𾿰¶Areadline è®Šé‡ comment-begin çš„-
N被æ’入到當å‰è¡Œæ»¿C如果給出一èšï›˜çš„åƒæ•¸ï¼Œå‘½ä»¤çš„行為類似於一-
èˆ}關: 如果行漲r符ä¸åŒ¹é… comment-begin 的Aå°‡æ’入這蚧,å¦å‰‡
åŒ¹é… comment-begin çš„å—符將被從行-
æ¼£R除。在兩種情æ³ä¸‹ï¼Œé€™ä¸€è¡Œéƒ½è¢«æŽ¥å—, 好åƒè¼¸å…¥äº†æ–°è¡Œç¬¦ä¸€æ¨£ã€‚com-
ment-begin çš„é è¨ïŸ²ç‚±o這茤R令將當å‰è¡Œè®Šæˆ ä¸€æ¢ shell
注釋。如果數æŠïš¸ç‚±o注釋å—符被刪除,這一行將被 shell 執行。
glob-complete-word (M-g)
point 之å‰çš„詞被當作路徑擴展的一èšç‹¾ï¹›A尾部暗å«äº†ä¸€èŒ¯P號。這-
èšç‹¾â—‹Q用來 為å¯èƒ½çš„補全產生匹é…的檔å列表。
glob-expand-word (C-x *)
point 之å‰çš„詞被當作路徑擴展的一-
èšç‹¾ï¹›A匹é…的檔å的列表被æ’入,替æ›é€™èŒ§ã€‚ 如果給出一èš-
æŠïš±A在路徑擴展之å‰å°‡æ·»åŠ ä¸€èŒ¯P號。
glob-list-expansions (C-x g)
顯示 glob-expand-word å¯èƒ½ç”¢ç”Ÿçš„æ“´å±•的列表,-
姻虞礅e行。如果給出一èšï›˜åƒæ•¸ï¼Œåœ¨è·¯å¾‘擴展之å‰å°‡æ·»åŠ ä¸€èŒ¯P號。
dump-functions
å‘ readline 輸出æµåˆ—å°æ‰€æœ‰çš„å‡½æ•¸å’Œå®ƒæ€æ¾ˆé¶¬éž€é¶¬p。如果給出一èš-
æŠïš±A è¼¸å‡ºå°‡è¢«æ ¼å¼åŒ–,å¯ä»¥ç”¨ä½œ inputrc 檔案一部分。
dump-variables
å‘ readline 輸出æµåˆ—å°æ‰€æœ‰å¯è¨ç½®çš„ readline 函數。如果給出一èš-
æŠïš±A è¼¸å‡ºå°‡è¢«æ ¼å¼åŒ–,å¯ä»¥ç”¨ä½œ inputrc 檔案一部分。
dump-macros
å‘ readline 輸出æµåˆ—å°æ‰€æœ‰é—œè¯åˆ°å®çš„ readline 按éµåºåˆ—以åŠå®ƒ-
抰擖Xçš„å—符串。 如果給出一èšï›˜åƒæ•¸ï¼Œè¼¸å‡ºå°‡è¢«æ ¼å¼åŒ–,å¯ä»¥ç”¨ä½œ
inputrc 檔案一部分。
display-shell-version (C-x C-v)
é¡¯ç¤ºç•¶å‰ bash 實例的版本信æ¯ã€‚
Programmable Completion
當試圖å°ä¸€èŒ¤Rä»¤çš„åƒæ•¸é€²è¡Œè©žçš„補全時,如果已經使用內建命令 complete
定義了這茤R令的補全è¦å‰‡ ( compspec),將啟動å¯ç·¨ç¨‹è£œå…¨åŠŸèƒ½ (åƒè¦‹ä¸‹æ‚¸
shell O(SHELL BUILTIN COMMANDS) ç« ç¯€)。
漸,命令å被確èªã€‚如果é‡å°é€™èŒ¤R令有補全è¦å‰‡çš„定義,那麼將使用
è¦å‰‡ä¾†ç”¢ç”Ÿå¯èƒ½çš„詞的補全的列表。如果命令詞是一虒çº|å…¨å,將漸æœç´¢
é‡å°é€™è™’çº|å…¨åçš„è¦å‰‡ã€‚如果é‡å°é€™è™’çº|免忲’有找到è¦å‰‡ï¼Œå°‡å˜—試查找
é‡å°æœ€å¾Œä¸€è“袟b後悸熙﹞尷熙W則。
一旦找到了一茬W則,它將用作產生匹é…的詞。如果沒有找到,將進行上 Com-
pleting 䏿zçš„ bash é è¨çš„補全。
漸,將執行è¦å‰‡æŒ‡å®šçš„å‹•ä½œã€‚åªæœ‰ä»¥è¢«è£œå…¨çš„詞開始的匹é…è©žæ‰æœƒè¢«è¿”回。
當在檔案或目錄å補全ä¸ä½¿ç”¨ -f 或 -d é¸é …時,shell è®Šé‡ FIGNORE
將用於å°åŒ¹é…é€²è¡ŒéŽæ¿¾ã€‚
接下來,將產生所有由-G é¸é …çµ¦å‡ºçš„æª”åæ“´å±•æ¨¡å¼æŒ‡å®šçš„補全。
模å¼ç”¢ç”Ÿçš„詞ä¸å¿…匹é…n補全的詞。shell è®Šé‡ GLOBIGNORE
䏿œƒç”¨æ–¼éŽæ¿¾åŒ¹é…çµæžœï¼Œä½†æ˜¯è®Šé‡ FIGNORE 會被使用。
接下來,將考慮 -W é¸é …çš„åƒæ•¸æŒ‡å®šçš„å—符串。這茼r符串漸被
åŠƒåˆ†ï¼Œç”¨ç‰¹æ®Šè®Šé‡ IFS ä¸çš„å—符作為分隔符。shell 引用被當作一茧。
接下來,æ¯èŒ§è¢«æ“´å±•,使用上 EXPANSION 䏿zçš„ brace expansion, tilde
expansion, parameter 和 variable expansion, command substitution,
arithmetic expansion, ä»¥åŠ pathname expansion
è¦å‰‡è™•ç†ã€‚å°æ–¼çµæžœï¼Œå†ä½¿ç”¨ä¸Š Word Splitting 䏿zçš„è¦å‰‡åŠƒåˆ†æˆè©žã€‚
æ“´å±•çš„çµæžœèˆ‡n補全的詞進行å‰éƒ¨ä¸€P的比較,匹é…的詞æˆç‚ºå¯èƒ½çš„補全。
在這些匹é…被產生後,任何由 -F å’Œ -C é¸é …指定的 shell
å‡½æ•¸å’Œå‘½ä»¤å°‡è¢«åŸ·è¡Œã€‚ç•¶å‘½ä»¤æˆ–å‡½æ•¸è¢«åŸ·è¡Œæ™‚ï¼Œè®Šé‡ COMP_LINE å’Œ COMP_POINT
被賦A使用上 Shell Variables ä¸çš„è¦å‰‡ã€‚ 如果n執行 shell
函數,還將è¨ç½®è®Šé‡ COMP_WORDS å’Œ COMP_CWORD 當函數或命令被執行時,第一-
èŒæŠïš¼Oç‰å¾…åƒæ•¸è¢«è£œå…¨çš„命令的å稱, ç¬¬äºŒèŒæŠïš¼On補全的詞,第三-
èŒæŠïš¼Oç•¶å‰å‘½ä»¤è¡Œä¸ï¼Œnè£œå…¨çš„è©žå‰æ‚¸ç†Šã€‚ å°-
nè£œå…¨çš„è©žç”¢ç”Ÿçš„è£œå…¨ä¸æœƒé€²è¡Œä»»ä½•éŽæ¿¾ï¼›å‡½æ•¸æˆ–å‘½ä»¤åœ¨ç”¢ç”ŸåŒ¹é…æ™‚有完全的自由。
任何 -F 指定的函數將被漸執行。函數å¯ä»¥ä½¿ç”¨ä»»ä½• shell 功能,
包å«å…§å»ºå‘½ä»¤ compgen,來產生匹é…ã€‚å®ƒå¿…é ˆå°‡å¯èƒ½çš„è£œå…¨æ”¾åˆ°æ•¸çµ„è®Šé‡ COM-
PREPLY ä¸ã€‚
接下來,任何 -C é¸é …指定的命令將被執行,其執行環境與命令替æ›
的環境相åŒã€‚å®ƒæ‡‰ç•¶å‘æ¨™æº–輸出列å°ä¸€è™’犮的列表,æ¯è¡Œä¸€è‚C
åæ–œæ§“å¯ä»¥ç”¨ä¾†è½‰ç¾©ä¸€è™“s行符,如果需n的話。
所有å¯èƒ½çš„補全都產生之後,將å°åˆ—表進行 -X é¸é …æŒ‡å®šçš„ä»»ä½•éŽæ¿¾ã€‚
éŽæ¿¾å™¨æ˜¯ä¸€èšç‹¾ï¹›Aå’Œè·¯å¾‘åæ“´å±•ä¸çš„一樣;模å¼ä¸çš„ & 替æ›ç‚º n補全的詞。å—-
惜Wçš„ & å¯ä»¥ç”¨åæ–œæ§“è½‰ç¾©ï¼›åæ–œæ§“åœ¨é€²è¡ŒåŒ¹é…æ™‚被刪除。 任何匹é…這-
èšç‹¾ã€žçˆ¾çŠ®å°‡å¾žåˆ—è¡¨ä¸åˆªé™¤ã€‚å‰å°Žçš„ ! 將使模å¼å«ç¾©ç›¸åï¼›
這種情æ³ä¸‹ï¼Œä»»ä½•ä¸åŒ¹é…這èšç‹¾ã€žçˆ¾çŠ®å°‡è¢«åˆªé™¤ã€‚
最後,B-P å’Œ -S 指定的任何å‰ç¶´å’Œå»¶ä¼¸æª”åè¢«æ·»åŠ åˆ°è£œå…¨åˆ—è¡¨çš„æ¯ æˆå¾Œ-
情Açµæžœè¿”回給 readline 補全代碼,作為å¯èƒ½çš„補全列表。
如果先å‰åŸ·è¡Œçš„動作沒有產生任何匹é…,並且在定義 compspec è¦å‰‡æ™‚,為 com-
plete 命令æä¾›äº† -o dirname é¸é …,將嘗試目錄å補全。
é è¨æƒ…æ³ä¸‹ï¼Œå¦‚果找到了一茬W則,它產生的任何æ±è¥¿éƒ½è¢«è¿”回給補全代碼,
作為å¯èƒ½çš„補全的全集。ä¸å†å˜—試é è¨çš„ bash 補全,readline é è¨çš„
檔åè£œå…¨ä¹Ÿæœƒç¦æ¢ã€‚如果定義è¦å‰‡æ™‚,為 complete 命令æä¾›äº† -o default
é¸é …,在è¦å‰‡æ²’æœ‰ç”¢ç”ŸåŒ¹é…æ™‚將進行 readline é è¨çš„補全處ç†ã€‚
當一茬W則指出期望目錄å補全時,å¯ç·¨ç¨‹è£œå…¨å‡½æ•¸å¼·åˆ¶ readline 在補全的å稱
後æ²KåŠ ä¸€è“袟bï¼Œå¦‚æžœå®ƒæ˜¯ä¸€èŒ–é´ åª¬çš„ç¬¦è™Ÿé€£æŽ¥ã€‚ç„¶å¾Œé‚„nç¶“éŽ readline 變é‡
mark-directories 的Bç†ï¼Œä¸ç®¡ readline è®Šé‡ mark-symlinked-directories
的O什麼。
v(HISTORY)
當啟用內建命令 set çš„ -o history é¸é …時,shell å…è¨±è¨ªå• command his-
tory,以å‰è¼¸å…¥çš„命令的列表。 HISTSIZE 的峓@命令列表ä¸ä¿å˜çš„命令數é‡ã€‚
éŽåŽ» HISTSIZE (é è¨ç‚º500) 命令將被ä¿å˜ã€‚shell
å°‡æ¯æ¢å‘½ä»¤åœ¨é€²è¡Œåƒæ•¸å’Œè®Šé‡æ“´å±•ä¹‹å‰ ä¿å˜åˆ°æ·å²åˆ—è¡¨ä¸ (åƒè¦‹ä¸Šæ‚¸ EXPAN-
SION 段è½),但是是在æ·å²æ“´å±•進行之後,並且nç¶“éŽ shell è®Šé‡ HISTIGNORE
å’Œ HISTCONTROL 處ç†ã€‚
在啟動時,æ·å²æ ¹æ“šä»¥è®Šé‡ HISTFILE 的隻W的檔案 (é è¨æ˜¯ ~/.bash_his-
tory) 進行åˆå§‹åŒ–。 如果需n的話,以 HISTFILE
為å的檔案將被截斷,來包å«ä¸è¶…éŽè®Šé‡ HISTFILESIZE 的定的行數。當交互
shell 退出時,最後 $HISTSIZE 行被從æ·å²åˆ—表ä¸è¤‡è£½åˆ° $HISTFILE
檔案ä¸ã€‚如果啟用了 shell é¸é … histappend (åƒè¦‹ä¸‹æ‚¸ shell
O(SHELL BUILTIN COMMANDS) ç« ç¯€ä¸å°å…§å»ºå‘½ä»¤ shopt çš„æ-
z)ï¼Œé€™äº›è¡Œè¢«è¿½åŠ åˆ°æ·å²æª”案ä¸ï¼Œå¦å‰‡æ·å²æª”案被覆蓋。如果 HISTFILE
è¢«å–æ¶ˆå®šç¾©ï¼Œæˆ–者如果æ·å²æª”案ä¸å¯å¯«ï¼Œæ·å²å°‡ä¸æœƒä¿å˜ã€‚ä¿å˜æ·å²ä¹‹å¾Œï¼Œ
æ·å²æª”案被截斷,以包å«ä¸è¶…éŽ HISTFILESIZE 行。如果 HISTFILESIZE
è¢«å–æ¶ˆå®šç¾©ï¼Œä¸æœƒé€²è¡Œæˆªæ–·æ“作。
內建命令 fc (åƒè¦‹ä¸‹æ‚¸ shell O(SHELL BUILTIN COMMANDS) ç« ç¯€)
å¯ä»¥ç”¨ä¾†åˆ—出或蚹翵禱新執行æ·å²åˆ—表ä¸çš„一部分。內建命令 history
å¯ä»¥ç”¨ä¾†é¡¯ç¤ºæˆ–èš¹åšå²åˆ—表,æ“作æ·å²æª”案。當使用命令行編輯時,æ¯ç¨®
編輯模å¼éƒ½æœ‰æœç´¢å‘½ä»¤ï¼Œæä¾›å°æ·å²åˆ—表的訪å•。
shell å…許控制些命令被ä¿å˜åˆ°æ·å²åˆ—表ä¸ã€‚å¯ä»¥è¨ç½® HISTCONTROL å’Œ
HISTIGNORE 變é‡ï¼Œä¾†ä½¿å¾— shell åªä¿å˜è¼¸å…¥å‘½ä»¤çš„一茪l集。shell é¸é … cmd-
hist 如果被啟用,將使得 shell 將多行的命令的æ¯ä¸€è¡Œä¿å˜åˆ°åŒä¸€-
èšžå²æ¢ç›®ä¸ï¼Œ 在需nçš„åœ°æ–¹æ·»åŠ åˆ†è™Ÿä¾†ä¿è¨¼èªžç¾©çš„æ£ç¢ºæ€§ã€‚shell é¸é … lithist
使得 shell ä¿å˜å‘½ä»¤æ™‚,ä¿ç•™åµŒå…¥çš„æ–°è¡Œè€Œä¸æ˜¯ç”¨åˆ†è™Ÿä»£æ›¿ã€‚åƒè¦‹ä¸‹ shell
O(SHELL BUILTIN COMMANDS) ä¸ï¼Œå…§å»ºå‘½ä»¤ shopt çš„æ-
z,有關è¨ç½®å’Œå–消 shell é¸é …的信æ¯ã€‚
shell æ”¯æŒæ·å²æ“´å±•機制,類似於 csh 䏿·å²æ“´å±•。這一節æ-
z了å¯ç”¨çš„語法特å¾ã€‚在交互的 shell ä¸é€™ä¸€æ©Ÿåˆ¶è¢«é è¨å•Ÿç”¨ï¼Œ
å¯ä»¥ä½¿ç”¨å…§å»ºå‘½ä»¤ set çš„ -H é¸é …來ç¦ç”¨å®ƒ (åƒè¦‹ä¸‹æ‚¸ shell O(SHELL
BUILTIN COMMANDS) ç« ç¯€)。éžäº¤äº’çš„ shell é è¨ä¸é€²è¡Œæ·å²æ“´å±•。
æ·å²æ“´å±•å°‡æ·å²åˆ—表ä¸çš„詞引入輸入æµä¸ï¼Œä½¿å¾—å¯ä»¥æ–¹ä¾¿åœ°å¥‘_已執行命令,
在當å‰è¼¸å…¥è¡Œä¸ç‚ºå‰ä¸€èŒ¤R令æ’å…¥æ–°çš„åƒæ•¸ï¼Œ 或者快速蚰翰e一茤R令ä¸çš„錯誤。
æ·å²æ“´å±•在讀入一整行後,在 shell 將它拆分æˆè©žä¹‹å‰ç«‹å³é€²è¡Œã€‚它
由兩部分組æˆã€‚漸是判斷替æ›ä¸ä½¿ç”¨æ·å²åˆ—表ä¸ä¸€è¡Œã€‚å…¶æ¬¡æ˜¯é¸æ“‡é‚£ä¸€è¡Œä¸-
n包å«åˆ°ç•¶å‰è¡Œä¸çš„部分。 從æ·å²ä¸é¸æ“‡çš„行稱為
event,從那一行ä¸é¸æ“‡çš„部分是 words。 å¯ä»¥ç”¨å¤šç¨®å¤šæ¨£çš„ modifiers
來æ“縱所é¸çš„è©žã€‚åœ¨è®€å…¥è¼¸å…¥æ™‚ï¼Œè¡Œè¢«æŒ‰ç…§åŒæ¨£æ–¹å¼åˆ†è§£æˆè©žï¼Œ å› æ¤å¤šèŒˆH
metacharacter 分隔的詞,如果被引號包å«ï¼Œå°±è¢«ç•¶æˆä¸€èŒ§ã€‚
æ·å²æ“´å±•ç”±æ·å²æ“´å±•å—符引入,é è¨æ˜¯ !ã€‚åªæœ‰å斜槓 (\)
和單引號å¯ä»¥å¼•用æ·å²æ“´å±•å—符。
內建命令 shopt å¯ä»¥è¨å®šå¤šèš‡é¾ 脹,來調整æ·å²æ“´å±•的行為。如果 shell é¸é …
histverify 被啟用 (åƒè¦‹å…§å»ºå‘½ä»¤ shopt çš„æz),並且æ£åœ¨ä½¿ç”¨ readlin A
æ·å²æ›¿æ›ä¸æœƒè¢«ç«‹å³å‚³çµ¦ shell 解釋器。與æ¤ç›¸å°ï¼Œæ“´å±•後的行被å¥s載入
readline 編輯緩沖å€ï¼Œé€²è¡Œé€²ä¸€æ¥çš„蚹鵅C如果æ£åœ¨ä½¿ç”¨ readlin A
並且啟用了 shell é¸é … histreedi A 失敗的æ·å²æ›¿æ›å°‡è¢«å¥s載入到 readline
編輯緩沖å€ï¼Œé€²è¡Œæ”¹æ£ã€‚內建命令 history çš„ -p
é¸é …å¯ä»¥ç”¨ä¾†åœ¨åŸ·è¡Œä¹‹å‰æŸ¥çœ‹æ·å²æ“´å±•將如何進行。內建命令 history çš„ -s
é¸é …å¯ä»¥ç”¨ä¾†åœ¨æ·å²åˆ—è¡¨æœ«å°¾æ·»åŠ å‘½ä»¤ï¼Œè€Œä¸çœŸæ£åŸ·è¡Œå®ƒæ€´A從而
在接下來的調用ä¸å¯ä»¥ä½¿ç”¨å®ƒæ€´C
shell å…許控制æ·å²æ“´å±•機制使用的多種å—符 (åƒè¦‹ä¸Šæ‚¸ Shell Variables ä¸
histchars çš„æz)。
Event Designators
事件指示器 (event designator) 是一蚢åšå²åˆ—è¡¨ä¸æŸèŒ¤R令行æ¢ç›®çš„引用。
! 開始一茤R令替æ›ï¼Œé™¤éžå¾ŒæŽ˜è¸H的是 blank, newline, = 或是 (.
!n 引用命令行 n.
!-n 引用當å‰å‘½ä»¤è¡Œæ¸›åŽ» n.
!! 引用上一æ¢å‘½ä»¤ã€‚這是 `!-1' çš„åŒç¾©è©žã€‚
!string
引用最近的以 string 開始的命令。
!?string[?]
å¼•ç”¨æœ€è¿‘çš„åŒ…å« string 的命令。尾部的 ? å¯ä»¥è¢«å¿½ç•¥ï¼Œå¦‚æžœ string
之後緊接著一虓s行符。
^string1^string2^
快速替æ›ã€‚契_上一æ¢å‘½ä»¤ï¼Œå°‡ string1 替æ›ç‚º string2. 與
``!!:s/string1/string2/'' ç‰åƒ¹ (åƒè¦‹ä¸‹æ‚¸ (Modifiers))。
!# 到æ¤ç‚ºæ¢è¼¸å…¥çš„æ•´èŒ¤R令行。
Word Designators
詞指示器 (word designator) 用於從 event ä¸é¸æ“‡æœŸæœ›çš„詞。 : 分隔 event
è¦å‰‡èˆ‡ word 指示器。它å¯ä»¥å¿½ç•¥ï¼Œå¦‚果詞指示器以 ^, $, *, -, 或 %
開始。詞被從行熄}始編號,第一茧被表示為 0。æ’入當å‰è¡Œä¸çš„詞以單-
èŒ èº“ç’Šæˆ´j。
0 (zero)
第 0 èŒ§ã€‚å° shell 來將,這是命令å。
n 第 n 茧。
^ ç¬¬ä¸€èŒæŠïš±C也就是,第 1 茧。
$ æœ€å¾Œçš„åƒæ•¸ã€‚
% 最近一次æœç´¢ `?string?' 匹é…的詞。
x-y 一組詞;`-y' 是 `0-y' 的簡寫。
* 所有詞,除了第 0 è‚C這是 `1-$' çš„åŒç¾©è©žã€‚如果 event ä¸åªæœ‰ä¸€-
茧,使用 * ä¹Ÿä¸æ˜¯éŒ¯èª¤ï¼›é€™ç¨®æƒ…æ³ä¸‹å°‡è¿”回空å—符串。
x* x-$ 的簡寫。
x- -$ çš„ç°¡å¯«ï¼Œå°±åƒ x* 一樣,但是忽略最後一茧。
如果給出了一 word 指示器,沒有給出 event è¦å‰‡ï¼Œå‰ä¸€èŒ¤R令將用作 event。
(Modifiers)
å¯é¸çš„ word 指示器之後,å¯ä»¥å‡ºç¾ä¸€èŒ¤å³–h茪Uz modifiers çš„åºåˆ—,æ¯ä¸€-
茬ㄚe綴有 `:'。
h 刪除檔å組æˆçš„尾部,åªä¿ç•™é 部。
t 刪除檔å組æˆä¸å‰æ‚¸æ¼²è§’åšAä¿ç•™å°¾éƒ¨ã€‚
r 刪除 .xxx å½¢å¼ä¸å°¾éƒ¨çš„å»¶ä¼¸æª”åæˆåˆ†ï¼Œä¿ç•™åŸºæœ¬å稱部分。
e 刪除所有內容,ä¿ç•™å°¾éƒ¨çš„延伸檔å。
p åˆ—å°æ–°çš„命令,但是ä¸åŸ·è¡Œå®ƒã€‚
q å¼•ç”¨æ›¿æ›æ‰€å¾—的詞,使它ä¸å†é€²è¡Œæ›¿æ›ã€‚
x å¼•ç”¨æ›¿æ›æ‰€å¾—的詞,類似與 q, ä½†æ˜¯æœƒæ ¹æ“š blank
和新行符分解為詞。
s/old/new/
將事件行ä¸å‡ºç¾çš„第一 old 替æ›ç‚º new C 任何分隔符都å¯ä»¥ç”¨ä¾†ä»£æ›¿
/,最後一茪戴j符是å¯é¸çš„,如果它是事件行的最後一茼r符。 old å’Œ
new ä¸çš„分隔符å¯ä»¥ç”¨ä¸€èŒªç‚±è¢Ÿb來引用。如果 & 出ç¾åœ¨ new
ä¸ï¼Œå®ƒå°‡æ›¿æ›ç‚º old C å¯ä»¥ç”¨å–®èŒªç‚±è¢Ÿb來引用 &。如果 old
為空,它將è¨ç½®ç‚ºæœ€å¾Œæ›¿æ›çš„ old A 或者,如果å‰-
惆Sæœ‰ç™¼ç”ŸéŽæ·å²æ›¿æ›ï¼Œå°±æ˜¯ !?string[?] æœç´¢ä¸çš„æœ€å¾Œä¸€ string C
& 契_上一次替æ›ã€‚
g 使得改變被整茖韟璈ç£ç。用於與 `:s' 或 `:&' çµåˆ
(例如,`:gs/old/new/')。 如果與 `:s'
çµåˆä½¿ç”¨ï¼Œä»»ä½•分隔符都å¯ä»¥ç”¨ä¾†ä»£æ›¿ /, 最後一-
茪戴j符是å¯é¸çš„,如果它是事件行的最後一茼r符。
除éžå¦å¤–èªªæ˜Žï¼Œé€™ä¸€ç« ä»‹ç´¹çš„å…§å»ºå‘½ä»¤å¦‚æžœæŽ¥å— - 引導的é¸é …,那麼它也接å—
-- ä½œç‚ºåƒæ•¸ï¼Œä¾†æŒ‡ç¤ºé¸é …çš„çµæŸ
: [arguments]
沒有效果;這茤R令除了擴展 arguments 並且作任何指定的-
å’¿wå‘之外,ä¸åšä»»ä½•事。 退出時返回0。
. filename [arguments]
source filename [arguments]
讀å–ä¸¦åœ¨ç•¶å‰ shell 環境ä¸åŸ·è¡Œ filename ä¸çš„命令,返回 filename
䏿œ€å¾Œä¸€èŒ¤R令的返回狀態。如果 filename ä¸ä¸åŒ…嫿–œæ§“
(slash),系統將在 PATH 䏿Ÿ¥æ‰¾åŒ…å« filename 的目錄。在 PATH
䏿œç´¢çš„æª”案ä¸å¿…是å¯åŸ·è¡Œçš„。 如果 bash 䏿˜¯é‹è¡Œæ–¼ posix mode,當
PATH 䏿‰¾ä¸åˆ°æª”案時會在當å‰ç›®éŒ„æœç´¢ã€‚如果 shopt 內建命令的 sour-
cepath é¸é …被關閉, PATH 將䏿œƒè¢«æœç´¢ã€‚如果有任何 arguments
,它怞足 filename çš„ä½ç½®åƒæ•¸ (positional parameters),å¦å‰‡
ä½ç½®åƒæ•¸ä¸ç™¼ç”Ÿè®ŠåŒ–。 è¿”å›žç‹€æ…‹æ˜¯ç¨¿æœ¬ä¸æœ€å¾Œä¸€èŒ¤R令退出時的狀態。
沒有執行命令則返回0,沒有找到或ä¸èƒ½è®€å– filename 時返回false。
alias [-p] [name[=value] ...]
Alias ä¸å¸¶åƒæ•¸æˆ–者帶 -p åƒæ•¸é‹è¡Œæ™‚å°‡åœ¨æ¨™æº–è¼¸å‡ºä»¥é€™æ¨£çš„æ ¼å¼ alias
name=value 給出別å列表。 å¦‚æžœæœ‰åƒæ•¸ï¼Œå°‡å‰µå»ºæä¾›äº† value çš„ name
的別å。 value ä¸å°¾éƒ¨çš„ç©ºæ ¼ä½¿å¾—åˆ¥å被擴展時,下一茧åšåˆ¥å替æ›ã€‚
å°æ–¼åƒæ•¸åˆ—表ä¸çš„æ¯ä¸€ name,如果 value 沒有 給出,這-
èOåçš„å稱和ï |被列å°å‡ºä¾†ã€‚ Alias 返回 true é™¤éž name
沒有定義為別å。
bg [jobspec]
ä½¿æŽ›èµ·çš„ç¨‹å¼ jobspec 在I景繼續執行,就好åƒå®ƒæ˜¯ç”¨ &
啟動的一樣。如果沒有指定 jobspec,shell æ„義上的 current job
e @ ~ 將被使用。 bg jobspec
返回0,除éžç•¶å‰ç¦æ¢äº†ä½œæ¥æŽ§åˆ¶ï¼Œæˆ–者在å…è¨±ä½œæ¥æŽ§åˆ¶ï¼Œä½† 是沒有找到
jobspec ï¼Œæˆ–è€…å®ƒä¸æ˜¯åœ¨ä½œæ¥æŽ§åˆ¶ä¸‹å•Ÿå‹•的時唌C
bind [-m keymap] [-lpsvPSV]
bind [-m keymap] [-q function] [-u function] [-r keyseq]
bind [-m keymap] -f filename
bind [-m keymap] -x keyseq:shell-command
bind [-m keymap] keyseq:function-name
bind readline-command
é¡¯ç¤ºç•¶å‰ readline éµå’ŒåŠŸèƒ½çš„ï¼Œå°‡ä¸€èŒ·é¶¬éŠ£ï“C和一 readline
功能或å®é€²è¡Œé—œè¯ï¼Œæˆ–者è¨ç½®ä¸€ readline 變é‡ã€‚æ¯ä¸€-
茼béžé¸é …çš„åƒæ•¸éƒ½æ˜¯ä¸€èŒ¤R令,好åƒå®ƒæ˜¯åœ¨ .inputrc
ä¸å‡ºç¾çš„一樣。但是æ¯èššé¶¬pæˆ–è€…å‘½ä»¤å¿…é ˆä½œç‚ºå–®ç¨çš„åƒæ•¸å‚³éžï¼›
也就是這樣 '"\C-x\C-r": re-read-init-file'。 å¦‚æžœæœ‰åƒæ•¸ï¼Œå®ƒ-
怞釵p下的æ„義:
-m keymap
使用 keymap 作為隨後的關è¯çš„keymap。å¯é¸çš„ keymap å稱是
emacs, emacs-standard, emacs-meta, emacs-ctlx, vi,
vi-move, vi-command,還有 vi-insert。 vi 和 vi-command
ç‰åƒ¹; emacs å’Œ emacs-standard ç‰åƒ¹ã€‚
-l 列出所有的 readline 功能。
-p 以程å¼å¯è®€çš„æ–¹å¼é¡¯ç¤º readline 功能å稱和關è¯
-P åˆ—å‡ºç•¶å‰ readline 功能å稱和關è¯ã€‚
-v 以程å¼å¯è®€çš„æ–¹å¼é¡¯ç¤º readline 變é‡å稱和
-V åˆ—å‡ºç•¶å‰ readline 變é‡å’ŒïŸ«C
-s 以程å¼å¯è®€çš„æ–¹å¼é¡¯ç¤º readline éµåºåˆ—å’Œå°æ‡‰çš„å®
-S 顯示 readline å®å°æ‡‰çš„éµåºåˆ—和他抰擖Xçš„å—符串
-f filename
從 filename ä¸è®€å–éµåºåˆ—
-q function
查詢那些éµå°‡åŸ·è¡Œfunction。
-u function
å–æ¶ˆæ‰€æœ‰é—œè¯åˆ° function çš„éµã€‚
-r keyseq
å–æ¶ˆç•¶å‰ä»»ä½• keyseq 的關è¯ã€‚
-x keyseq:shell-command
使 shell-command 在 keyseq 按下時被執行。
返回O0,除éžçµ¦å‡ºäº†ä¸€èŒªã„žéˆ±æ‚Oçš„é¸é …或是產生了一蚇欞~。
break [n]
從一 for, while, until, 或者 select 循環退出。 如果指定了 n
,就跳出 n 層循環。 n å¿…é ˆ >= 1。如果 n 比當å‰å¾ªç’°å±¤æ•¸é‚„-
n大,將跳出所有循環。 返回O0,除éžåŸ·è¡Œ break 的時 shell
䏿˜¯åœ¨åŸ·è¡Œä¸€è‹`環。
builtin shell-builtin [arguments]
執行指定的 shell å…§å»ºå‘½ä»¤ï¼Œå‚³éž arguments ,返回命令的返回C
這在定義了一茤M shell 內建命令åŒå的函數時很有用, 在那-
茖è»ïš´å°¹æ´å³ŠæˆèŒé¶¡ç”ˆè¡ˆé‡æ¼¸\能。cd 命令常以這種方å¼å¥s定義。
返回狀態是 false,如果指定的 shell-builtin 䏦䏿˜¯ä¸€ shell
內建命令。
cd [-L|-P] [dir]
改變當å‰è·¯å¾‘到 dir。這蚥僆qçš„é è¨ïŸ¶O HOME ç›®éŒ„ã€‚ç’°å¢ƒè®Šé‡ CDPATH
å®šç¾©äº†åŒ…å« dir çš„æœç´¢è·¯å¾‘。在 CDPATH ä¸å¯é¸çš„路徑å以冒號(:)
分隔。 CDPATH ä¸çš„空路徑å與當å‰è·¯å¾‘相åŒï¼Œå°±æ˜¯ ``.''. 如果
W 以斜槓 (/,slash) 起始,那麼 CDPATH 䏿œƒè¢«ä½¿ç”¨ã€‚ -P
é¸é …是說使用物ç†è·¯å¾‘çµæ§‹è€Œä¸æ˜¯è·Ÿéš¨ç¬¦è™ŸéˆæŽ¥ï¼Œ(åƒè¦‹ set 命令ä¸çš„
-P é¸é …); -L é¸é …å¼·åˆ¶è·Ÿéš¨ç¬¦è™ŸéˆæŽ¥ã€‚å¦å¤–,é¸é … - 與 $OLDPWD
是相åŒçš„。 返回O true ,如果æˆåŠŸåœ°æ”¹è®Šäº†ç›®éŒ„ï¼›å¦å‰‡æ˜¯ false。
command [-pVv] command [arg ...]
é‹è¡Œ command ,使用 args ä½œç‚ºåƒæ•¸ï¼Œç¦æ¢é€šå¸¸çš„æŸ¥æ‰¾ shell
函數的éŽç¨‹ã€‚åªæœ‰å…§å»ºå‘½ä»¤æˆ–者 PATH ä¸åŒ…å«çš„命令å¯ä»¥åŸ·è¡Œã€‚如果給出
-p åƒæ•¸ï¼Œ command 的查找是以 PATH çš„é è¨-
ï €i行的。這樣å¯ä»¥ä¿è¨¼æ‰¾åˆ°æ‰€æœ‰çš„æ¨™æº–工具。如果給出 -V 或者 -v
é¸é …,關於 command 的說明將被列å°å‡ºä¾†ã€‚ -v é¸é …使得表z這-
茤R令的詞,或者n執行 command 需n執行的檔案顯示出來; -V
é¸é …給出更詳細的æz。如果給出 -V 或者 -v é¸é …,退出狀態在找到了
command 的情æ³ä¸‹0,沒找到就是1。
如果沒有æä¾›é¸é …,並且產生了錯誤或者 command
沒有找到,退出狀態就是127。å¦å‰‡ï¼Œ command 內建命令的退出狀態是
command 的退出狀態。
compgen [option] [word]
æ ¹æ“š option 為 word 產生å¯èƒ½çš„補全。option 是 內建命令 complete
接å—的任何é¸é …,除了 -p å’Œ -r,將匹é…çµæžœå¯«åˆ°æ¨™æº–輸出。 當使用
-F 或 -C é¸é …時,å¯ç·¨ç¨‹è£œå…¨åŠŸèƒ½æ‰€è¨ç½®çš„多數 shell
變é‡å¦‚æžœå˜åœ¨ï¼Œå…¶ïŸ»Nä¸å†æœ‰ç”¨ã€‚
產生的匹é…與å¯ç·¨ç¨‹è£œå…¨ä»£ç¢¼æ ¹æ“šè£œå…¨è¦å‰‡åŠ ä¸Šç›¸åŒçš„æ¨™èªŒç›´æŽ¥ç”¢ç”Ÿçš„çµæžœç›¸åŒã€‚
如果指定了 wordï¼Œåªæœ‰åŒ¹é… word çš„è£œå…¨çµæžœå°‡è¢«é¡¯ç¤ºå‡ºä¾†ã€‚
返回åºuï¼Œé™¤éžæä¾›äº†éžæ³•çš„é¸é …,或者沒有產生匹é…。
complete [-abcdefgjksuv] [-o comp-option] [-A action] [-G globpat] [-W
wordlist] [-P prefix] [-S suffix]
[-X filterpat] [-F function] [-C command] name [name ...]
complete -pr [name ...]
æŒ‡å®šæ¯ name çš„åƒæ•¸æ‡‰ç•¶å¦‚何被補全。如果給出了 -p é¸é …,
或者沒有é¸é …çµ¦å‡ºï¼Œç¾æœ‰çš„補全è¦å‰‡å°‡è¢«é¡¯ç¤ºå‡ºä¾†ï¼Œä»¥ä¸€ç¨®å¯ä»¥-
å’±å³Žå€æ“—J çš„æ ¼å¼é¡¯ç¤ºã€‚-r é¸é …將一èŒwå°æ¯ name 的補全è¦å‰‡åˆªé™¤ã€‚
或者,如果沒有給出 name,將刪除所有補全è¦å‰‡ã€‚
嘗試詞的補全時,應用這些補全è¦å‰‡çš„éŽç¨‹åœ¨ä¸Š Programmable Comple-
tion(å¯ç·¨ç¨‹è£œå…¨) ä¸è©³z。
å…¶ä»–é¸é …,如果給出的話,具有下列æ„義。-G, -W, å’Œ -X é¸é …çš„åƒæ•¸
(如果需n的話,還包括 -P å’Œ -S é¸é …)
應當被引用,é¿å…在執行內建命令 complete 之å‰è¢«æ“´å±•。
-o comp-option
comp-option 控制著 compspec
除了簡單地產生補全之外的多種行為。 comp-option
å¯ä»¥æ˜¯å¦‚下之一:
default 使用 readline çš„é è¨æª”å補全,如果 compspec
沒有得到匹é…。
dirnames
進行目錄å補全,如果 compspec 沒有得到匹é…。
filenames
告訴 readline,compspec
產生了檔å,使它å¯ä»¥é€²è¡Œä»»ä½•檔å專用的處ç†
(例如,給目錄ååŠ ä¸Šæ–œæ§“æˆ–æ¶ˆé™¤å°¾éƒ¨ç©ºç™½)。主n用於
shell 函數。
nospace 告訴 readline ä¸nå‘è£œå…¨çš„è©žåœ¨è¡Œçš„æœ€å¾Œæ·»åŠ ä¸€èŒ èº“
(這是é è¨è¡Œç‚º)。
-A action
action å¯ä»¥æ˜¯ä¸‹åˆ—之一,來產生一系列å¯èƒ½çš„è£œå…¨çµæžœï¼š
alias 起別å。也å¯ä»¥ç”¨ -a 指定。
arrayvar
數組變é‡å。
binding Readline 按éµé—œè¯ã€‚
builtin shell 內建命令的å稱。也å¯ä»¥ç”¨ -b 指定。
command 命令å。也å¯ä»¥ç”¨ -c 指定。
directory
目錄å。也å¯ä»¥ç”¨ -d 指定。
disabled
被ç¦ç”¨çš„內建命令å稱。
enabled 啟用的內建命令å稱。
export 被導出的 shell 變é‡å稱。也å¯ä»¥ç”¨ -e 指定。
file 檔å。也å¯ä»¥ç”¨ -f 指定。
function
shell 函數的å稱。
group 組å。也å¯ä»¥ç”¨ -g 指定。
helptopic
內建命令 help 接å—的幫助主題。
hostname
主機åï¼Œå¾žç’°å¢ƒè®Šé‡ HOSTFILE 指定的檔案ä¸å¾—到。
job 作æ¥åï¼Œå¦‚æžœä½œæ¥æŽ§åˆ¶è¢«æ¿€æ´»çš„è©±ã€‚ä¹Ÿå¯ä»¥ç”¨ -j
指定。
keyword shell ä¿ç•™å—。也å¯ä»¥ç”¨ -k 指定。
running æ£åœ¨é‹è¡Œçš„作æ¥åï¼Œå¦‚æžœä½œæ¥æŽ§åˆ¶è¢«æ¿€æ´»çš„è©±ã€‚
service æœå‹™å。也å¯ä»¥ç”¨ -s 指定。
setopt 內建命令 set çš„ -o é¸é …çš„æœ‰æ•ˆåƒæ•¸ã€‚
shopt 內建命令 shopt 接å—çš„ shell é¸é …å。
signal 信號å。
stopped åœæ¢çš„作æ¥åï¼Œå¦‚æžœä½œæ¥æŽ§åˆ¶è¢«æ¿€æ´»çš„è©±ã€‚
user 使用者å。也å¯ä»¥ç”¨ -u 指定。
variable
shell 變é‡çš„å稱。也å¯ä»¥ç”¨ -v 指定。
-G globpat
æª”åæ“´å±•æ¨¡å¼ globpat 被擴展,產生å¯èƒ½çš„補全。
-W wordlist
wordlist 被使用 IFS
特殊變é‡ä¸çš„å—符作為定界符來拆分,æ¯-
茧痕G的詞被擴展。å¯èƒ½çš„è£œå…¨æ˜¯çµæžœåˆ—表 ä¸åŒ¹é…-
n補全的詞的那一些。
-C command
command 將在一茪l shell
環境ä¸åŸ·è¡Œï¼Œå®ƒçš„çµæžœç”¨ä½œå¯èƒ½çš„補全。
-F function
shell 函數 function å°‡åœ¨ç•¶å‰ shell
環境ä¸åŸ·è¡Œã€‚ç•¶å®ƒçµæŸæ™‚,å¯èƒ½ 的補全å¯ä»¥å¾žæ•¸çµ„å…ƒç´ COM-
PREPLY ä¸å¾—到。
-X filterpat
filterpat 是一èšç‹¾ï¹›Aç”¨æ–¼æª”åæ“´å±•。所有å‰-
æ‚¸ç‘ªé¾ ç’Måƒæ•¸ç”¢ç”Ÿ çš„å¯èƒ½çš„補全都nç¶“éŽé€™ä¸€æ¥è™•ç†ï¼Œæ¯ä¸€-
茪ït filterpat 的補全都 被從列表ä¸åˆªé™¤ã€‚為 filterpat
åŠ ä¸Šå‰å°Ž ! ä½¿æ¨¡å¼æ„義相åï¼› 這種情æ³ä¸‹ï¼Œæ‰€æœ‰ä¸åŒ¹é…
filterpat 的模å¼è¢«åˆªé™¤ã€‚
-P prefix
在所有其他é¸é …都處ç†éŽä¹‹å¾Œï¼Œprefix è¢«åŠ åˆ°æ¯-
茈ièƒ½çš„è£œå…¨å‰æƒ…C
-S suffix
在所有其他é¸é …都處ç†éŽä¹‹å¾Œï¼Œsuffix è¢«åŠ åˆ°æ¯-
茈i能的補全後情C
返回åºu,除éžçµ¦å‡ºäº†éžæ³•çš„é¸é …,給出除 -p å’Œ -r 之外 çš„æŸ-
èš‡é¾ ç‘禸S有給出 name åƒæ•¸ï¼Œè©¦åœ–åˆªé™¤ä¸€æ¢ name 的補全
è¦å‰‡ä½†æ˜¯è¦å‰‡ä¸å˜åœ¨ï¼Œæˆ–è€…æ·»åŠ è£œå…¨è¦å‰‡æ™‚出錯。
continue [n]
復ä½åˆ°å¤–層 for, while, until, 或 select
循環的下一次開始。如果指定了 n A 復ä½åˆ°å‘外第 n 層循環的開始。 n
å¿…é ˆ >= 1。如果 n 比外部循環的層數n多,將復ä½åˆ°æœ€å¤–層的循環
(``top-level'' loopï¼Œé ‚å±¤å¾ªç’°)。 返回O 0,除éžåŸ·è¡Œ continue
時,shell 䏿˜¯åœ¨å¾ªç’°ä¹‹ä¸ã€‚
declare [-afFirtx] [-p] [name[=value]]
typeset [-afFirtx] [-p] [name[=value]]
è²æ˜Žè®Šé‡ä¸”/或è¨ç½®å®ƒæ€ç˜§æ£å½C如果沒有給出 name 則顯示變é‡çš„C
é¸é … -p 將顯示æ¯èŒ¼W稱 name 的屬性和C當使用 -p
時,其他é¸é …被忽略。é¸é … -F
ç¦æ¢é¡¯ç¤ºå‡½æ•¸å®šç¾©ï¼›åªæœ‰å‡½æ•¸å和屬性會被顯示。 -F é¸é …æš—å« -f.
下列é¸é …å¯ç”¨ä¾†åˆ¶åªè¼¸å‡ºå…·æœ‰æŒ‡å®šå±¬æ€§çš„變é‡ï¼Œæˆ–者為變é‡è¨ç½®å±¬æ€§ï¼š
-a æ¯ name éƒ½æ˜¯æ•¸çµ„è®Šé‡ (åƒè¦‹ä¸Šæ‚¸ Arrays 段è½)。
-f åªä½¿ç”¨å‡½æ•¸å。
-i 變é‡è¢«ç•¶ä½œä¸€èšžè’±ïš±F當變é‡è¢«è³¦ïŸ¸ä¼€N進行算術é‹ç®— (åƒè¦‹
D(ARITHMETIC EVALUATION) ç« ç¯€)。
-r 使得 name åªè®€ã€‚這些å稱ä¸èƒ½å†è¢«å¾ŒçºŒçš„è³¦ï …yå¥è³¦-
峔消定義。
-t è¨ç½®æ¯ name çš„ trace(跟蹤) 屬性。被跟蹤的函數繼承了
調用者 shell 的 DEBUG 陷阱。trace
屬性å°è®Šé‡æ²’有特殊æ„義。
-x 標記 name 為å¯ä»¥é€šéŽç’°å¢ƒå°Žå‡ºçµ¦å¾ŒçºŒå‘½ä»¤ã€‚
使用 `+' 代替 `-' å°‡é—œé–‰å±¬æ€§ï¼Œç‰¹æ®Šæƒ…æ³æ˜¯ +a ä¸èƒ½ç”¨æ–¼éŠ·æ¯€ä¸€
數組變é‡ã€‚ç•¶ç”¨æ–¼å‡½æ•¸ä¸æ™‚ï¼Œå®ƒä½¿å¾—æ¯ name æˆç‚ºå±€éƒ¨çš„ï¼Œå°±åƒ ä½¿ç”¨äº†
local 命令。返回O 0,除éžé‡åˆ°äº†éžæ³•çš„é¸é …,試圖使用 ``-f
foo=bar'' 定義函數,試圖å‘åªè®€è®Šé‡è³¦ïŸ«Aè©¦åœ–å‘æ•¸çµ„變é‡è³¦-
沒有使用復åˆçš„賦 語法 (åƒè¦‹ä¸Šæ‚¸ Arrays 段è½),name
之䏀䏿˜¯æœ‰æ•ˆçš„ shell 變é‡å,試圖將數組變é‡çš„æ•¸çµ„
狀態關閉,或者是試圖使用 -f 顯示一茪ㄕs在的函數。
dirs [-clpv] [+n] [-n]
沒有é¸é …時顯示當å‰ä¿å˜çš„目錄。é è¨è¼¸å‡ºç‚ºä¸€è¡Œï¼Œç›®éŒ„åç”¨ç©ºæ ¼åˆ†é–‹ã€‚
å¯ä»¥ä½¿ç”¨ pushd å‘½ä»¤å°‡ç›®éŒ„æ·»åŠ åˆ°åˆ—è¡¨ï¼Œ popd
命令將列表ä¸çš„æ¢ç›®åˆªé™¤ã€‚
+n 顯示 dirs 在ä¸å¸¶é¸é …執行時顯示的列表的第 n è“å›“å ™A從 0
開始自左算起。
-n 顯示 dirs 在ä¸å¸¶é¸é …執行時顯示的列表的第 n è“å›“å ™A從 0
開始自å³ç®—起。
-c 刪除所有æ¢ç›®ï¼Œæ¸…空目錄棧。
-l 產生長列表;é è¨åˆ—è¡¨æ ¼å¼ä½¿ç”¨æ³¢æµªç·šä¾†è¡¨ç¤ºèŒªH目錄。
-p 輸出目錄棧,一行一è‚C
-v 輸出目錄棧,一行一è‚Aæ¯è“å›“å ³e悼[上它在棧ä¸çš„ä½ç½®ç´¢å¼•。
返回O 0,除éžçµ¦å‡ºäº†éžæ³•çš„åƒæ•¸ï¼Œæˆ–者 n 索引超出了目錄棧的Såœã€‚
disown [-ar] [-h] [jobspec ...]
沒有é¸é …æ™‚ï¼Œæ¯ jobspec 被從æ£åœ¨é‹è¡Œçš„作æ¥è¡¨ä¸åˆªé™¤ã€‚如果給出了 -
é¸é …ï¼Œæ¯ jobspec 並ä¸å¾žè¡¨ä¸åˆªé™¤ï¼Œè€Œæ˜¯è¢«æ¨™è¨˜ï¼Œä½¿å¾—在 shell 接到
SIGHUP ä¿¡è™Ÿæ™‚ï¼Œä¸æœƒå‘作æ¥ç™¼å‡º SIGHUP 信號。如果沒有給出 job-
spec A 也沒有給出 -a 或者 -r é¸é …,將使用當å‰ä½œæ¥ (current
job)。如果沒有給出 jobspec A é¸é … -a
æ„味著刪除或標記所有作æ¥ï¼›é¸é … -r ä¸å¸¶ jobspec åƒæ•¸æ™‚-
制æ“作åªå°æ£åœ¨é‹è¡Œçš„作æ¥é€²è¡Œã€‚返回O 0ï¼Œé™¤éž jobspec
䏿Œ‡å®šæœ‰æ•ˆçš„作æ¥ã€‚
echo [-neE] [arg ...]
輸出 argï¼Œä»¥ç©ºæ ¼åˆ†é–‹ï¼Œæœ€å¾ŒåŠ ä¸€è™“sè¡Œç¬¦ã€‚è¿”å›žï ‹`是 0。 如果指定了
-n,將ä¸åœ¨å°¾éƒ¨æ·»åŠ æ–°è¡Œç¬¦ã€‚å¦‚æžœçµ¦å‡ºäº† -e é¸é …,
å°‡å…è¨±è§£é‡‹ä¸‹åˆ—åæ–œæ§“轉義的å—符。 -E
é¸é …ç¦æ¢é€™äº›è½‰ç¾©å—符的解釋,å³ä½¿åœ¨é è¨è§£é‡‹å®ƒæ€æ¼•tçµ±ä¸ä¹Ÿæ˜¯å¦‚æ¤ã€‚
shell é¸é … xpg_echo å¯ä»¥ç”¨ä¾†åœ¨é‹è¡Œæ™‚判斷 echo 是å¦é è¨
展開這些轉義å—符。 echo ä¸å°‡ -- 作為é¸é …çš„çµæŸã€‚ echo
解釋下列轉義åºåˆ—:
\a alert (bell) 響鈴
\b backspace 回退
\c suppress trailing newline 刪除尾部新行符
\e an escape character å—符 Esc
\f form feed 進紙
\n new line 新行符
\r carriage return 回車
\t horizontal tab 水斥鶖
\v vertical tab è±Žç›´è·³æ ¼
\\ backslash åæ–œæ§“
\0nnn 一茪K比特å—符,它的O八進制 nnn (零到三茪K進制數å—)。
\nnn 一茪K比特å—符,它的O八進制 nnn (一到三茪K進制數å—)。
\xHH 一茪K比特å—符,它的Oåå…進制 HH (一到兩-
茪Qå…進制數å—)。
enable [-adnps] [-f filename] [name ...]
å…è¨±æˆ–ç¦æ¢ shell å…§å»ºå‘½ä»¤ã€‚ç¦æ¢ä¸€-
èŒªæ¾ˆå œR令使得ç£ç¢Ÿä¸Šçš„與內建命令åŒå
的檔案得以é‹è¡Œï¼Œä¸å¿…使用它的全路徑,å³ä½¿ shell
一般在æœç´¢ç£ç¢Ÿä¸Šçš„å‘½ä»¤ä¹‹å‰ æœç´¢å…§å»ºå‘½ä»¤ã€‚如果使用了 -n é¸é …,æ¯
name éƒ½è¢«ç¦æ¢ï¼›å¦å‰‡ï¼Œ name 被å…許。例如,n使用 PATH 䏿œç´¢åˆ°çš„
test å‘½ä»¤è€Œä¸æ˜¯ shell 內建的那一è‚Aå¯ä»¥é‹è¡Œ ``enable -n test''.
é¸é … -f æ„味著從共享庫 filename ä¸åŠ è¼‰æ–°çš„å…§å»ºå‘½ä»¤ name A
如果系統支æŒå‹•æ…‹åŠ è¼‰çš„è©±ã€‚é¸é … -d 將刪除曾經用 -f
åŠ è¼‰çš„å…§å»ºå‘½ä»¤ã€‚å¦‚æžœæ²’æœ‰çµ¦å‡º name åƒæ•¸ï¼Œæˆ–者給出了 -p
é¸é …,將顯示 shell 內建命令的列表。如果沒有其他é¸é …åƒæ•¸ï¼Œ 這-
茼C表åªåŒ…嫿‰€æœ‰è¢«å…許的 shell 內建命令;如果給出了
-n,將åªé¡¯ç¤ºè¢«ç¦æ¢çš„內建命令;如果給出了
-a,顯示的列表ä¸åŒ…嫿‰€æœ‰å…§å»ºå‘½ä»¤ï¼Œé‚„有命令是å¦è¢«å…許的指示;
如果給出了 -s,輸出被制為 POSIX special 內建命令。 返回O
0ï¼Œé™¤éž name 䏿˜¯ shell
內建命令,或者從共享庫ä¸åŠ è¼‰æ–°çš„å…§å»ºå‘½ä»¤æ™‚å‡ºéŒ¯ã€‚
eval [arg ...]
arg 被讀å–並連çµç‚ºå–®ä¸€çš„命令。這茤R令然後被 shell 讀å–並執行,
它的退出狀態被作為 eval 的藀^。如果沒有 args,
或僅僅包å«ç©ºåƒæ•¸ï¼Œ eval 返回 0。
exec [-cl] [-a name] [command [arguments]]
如果指定了 command A å®ƒå°‡æ›¿æ› shellã€‚ä¸æœƒç”¢ç”Ÿæ–°çš„進程。 argu-
ments æˆç‚º command çš„åƒæ•¸ã€‚如果給出了 -l é¸é …,shell 將在傳éžçµ¦
command 的第 0 èŒæŠïš»e悼[上一茬så—符 (dash,`-')。這樣åšå’Œ
login(1) 相åŒã€‚é¸é … -c 使得命令 command 在一-
èŒ é°¾è—¿ç‹ºä»€é¶¡ç¢C如果給出了 - A shell 會將 name 作為第 0
èŒæŠï›†ï¨æ’雉執行的命令。如果由於æŸç¨®é´ž] as the zeroth argument
to the executed command. If command ä¸èƒ½è¢«åŸ·è¡Œï¼Œéžäº¤äº’çš„ shell
å°‡é€€å‡ºï¼Œé™¤éž shell é¸é … execfail
被è¨ç½®ç‚ºå…許,這種情æ³ä¸‹å®ƒè¿”回失敗。如果命令ä¸èƒ½åŸ·è¡Œï¼Œäº¤äº’çš„
shell 返回失敗。 如果沒有指定 command 任何咿wå‘å°ç•¶å‰ shell
發生作用,返回O 0。如果發生咿wå‘錯誤,返回狀態是 1。
exit [n]
使得 shell 以狀態 n 退出。如果忽略了 n A
退出狀態是最後執行的命令的退出狀態。在 shell 終æ¢å‰ï¼Œå° EXIT
的陷阱將被執行。
export [-fn] [name[=word]] ...
export -p
給出的å稱 names
被標記為自動地導出到後續執行的命令的環境ä¸ã€‚如果給出了 -f
é¸é …,å稱 names 指的是函數。如果沒有給出 names A 或者如果給出了
-p é¸é …,將列å°åœ¨é€™ shell ä¸è¢«å°Žå‡ºçš„æ‰€æœ‰åå—的列表。é¸é … -n
使得以æ¤ç‚ºå的變é‡çš„導出屬性被刪除。 export 返回
0,除éžé‡åˆ°äº†éžæ³•çš„é¸é …,name 之䏀䏿˜¯æœ‰æ•ˆçš„ shell 變é‡å,
或者給出了 -f é¸é …,而 name 䏿˜¯ä¸€èŒ–è»ïš±C
fc [-e ename] [-nlr] [first] [last]
fc -s [pat=rep] [cmd]
命令袨_。第一種形å¼ä¸ï¼Œæ·å²åˆ—表ä¸å¾ž first 到 last
Såœå…§çš„命令都被é¸å–。 First å’Œ last å¯ä»¥æŒ‡å®šç‚ºå—符串
(å¯ä»¥å®šä½æœ€å¾Œä¸€èŒˆHæ¤å—符串開始的命令) æˆ–è€…æ•¸å— (æ·å²åˆ—表ä¸
的索引,t數被當作相å°ç•¶å‰å‘½ä»¤è™Ÿçš„åç§»)。如果沒有指定 last A
它在列舉時被è¨ç‚ºç•¶å‰å‘½ä»¤ (å› æ¤ ``fc -l -10'' 將輸出最後 10
æ¢å‘½ä»¤),其他情æ³ä¸‹è¢«è¨ç‚º first C 如果沒有指定 first A
它在編輯時被è¨ç‚ºå‰ä¸€èŒ¤R令,列舉是è¨ç‚º -16。
é¸é … -n 使得列舉時ä¸é¡¯ç¤ºå‘½ä»¤è™Ÿç¢¼ã€‚é¸é … -r
å°‡å‘½ä»¤é †åºé€²è¡ŒæŽ‰æ›ã€‚如果給出了 -l
é¸é …,命令將列舉在標準輸出上。å¦å‰‡ï¼Œå°‡å•Ÿå‹• ename
給出的編輯器,編輯包å«é€™äº›å‘½ä»¤çš„æª”案。如果沒有給出 ename A
å°‡ä½¿ç”¨è®Šé‡ FCEDIT 的A如果 FCEDIT 沒有定義就使用 EDITOR çš„-
C如果ä»ç„¶æ²’有定義,將使用 vi C
ç·¨è¼¯çµæŸå¾Œï¼Œè¢«ç·¨è¼¯çš„命令將回顯並執行。
第二種形å¼ä¸ï¼Œcommand åœ¨æ¯ pat 的實例被 rep 替æ›å¾Œ 都被-
å¥s執行。使用這種特性時å¯ä»¥èµ·ä¸€èŒ¼é‡Žå³ˆæ¼£Oå: ``r=fc -s'',
這樣輸入 ``r cc'' å°‡é‹è¡Œæœ€å¾Œçš„以 ``cc'' é–‹é 的命令,輸入 ``r''
å°‡å¥s執行上一茤R令。
如果使用第一種形å¼ï¼Œè¿”回O 0,除éžé‡åˆ°äº†éžæ³•çš„é¸é …,或 first 或
last 指定的æ·å²è¡Œæ•¸è¶…出了Såœã€‚如果給出了 -e é¸é …,返回-
O最後執行的命令的返回A或著是失敗,如果臨時檔案ä¸çš„命令
執行出錯。如果使用第二種形å¼ï¼Œè¿”回狀態是å¥såŸ·è¡Œçš„å‘½ä»¤ï¼Œé™¤éž cmd
沒有指定一茼陵蘆瑣å²è¡Œï¼Œé€™ç¨®æƒ…æ³ä¸‹ fc 返回失敗。
fg [jobspec]
å°‡ jobspec æ¢å¾©è‡³å‰å°ï¼Œä½¿å®ƒæˆç‚ºç•¶å‰ä½œæ¥ã€‚如果 jobspec
ä¸å˜åœ¨ï¼Œå°‡ä½¿ç”¨ shell æ„義上的當å‰ä½œæ¥ current job。返回O
被放到å‰å°çš„命令的狀態,或者是失敗,如果在ç¦ç”¨ä½œæ¥æŽ§åˆ¶æ™‚é‹è¡Œï¼Œæˆ–者
åœ¨å•Ÿç”¨ä½œæ¥æŽ§åˆ¶æ™‚é‹è¡Œï¼Œä½† jobspec 沒有指定有效的作æ¥ï¼Œæˆ– jobspec
æŒ‡å®šäº†æ²’æœ‰ä½¿ç”¨ä½œæ¥æŽ§åˆ¶çš„ä½œæ¥ã€‚
getopts optstring name [args]
getopts ç”± shell 程å¼ç”¨ä¾†è™•ç†ä½ç½®åƒæ•¸ã€‚ optstring 包å«-
nè˜åˆ¥çš„é¸é …å—符;如果æŸèŒ¼rç¬¦è·Ÿéš¨è‘—å†’è™Ÿï¼Œé‚£éº¼é€™èš‡é¾ çµ°æ„¯ä¸€èŒæŠïš±A
需-
n用空白和它隔離開。冒號和å•號å—符ä¸èƒ½ç”¨ä½œé¸é …å—ç¬¦ã€‚æ¯æ¬¡å®ƒåŸ·è¡Œæ™‚,
getopts å°‡ä¸‹ä¸€èš‡é¾ ç’韘b shell è®Šé‡ name ä¸ï¼Œå¦‚æžœ name
ä¸å˜åœ¨å°±åˆå§‹åŒ–它;下一胻處ç†çš„åƒæ•¸çš„ç´¢å¼•æ”¾åœ¨è®Šé‡ OPTIND ä¸ã€‚æ¯æ¬¡
shell 或 shell 稿本被執行的時 OPTIND 被åˆå§‹åŒ–為 1。當æŸèš‡é¾ çµ°-
nåƒæ•¸æ™‚, getopts å°‡é‚£èŒæŠïš¹é¡åšƒåƒ†q OPTARG ä¸ã€‚shell 䏿œƒè‡ªå‹•å§œm
OPTIN F 在相åŒçš„ shell ä¸ï¼Œå¦‚æžœnä½¿ç”¨æ–°çš„åƒæ•¸é›†åˆè€Œéœ€n多次調用
getopts æ™‚ï¼Œå¿…é ˆæ‰‹å‹•å§œm它。
ç•¶é‡åˆ°é¸é …çµæŸçš„æ™‚唌Agetopts 以大於 0 的h出。 OPTIND
被è¨ç½®ç‚ºç¬¬ä¸€èŒ·Dé¸é …çš„åƒæ•¸çš„索引,name 被è¨ç½®ç‚º ?。
getopts 通常解釋ä½ç½®åƒæ•¸ï¼Œä½†æ˜¯å¦‚æžœ args ä¸çµ¦å‡ºäº†æ›´å¤šåƒæ•¸ï¼Œ
getopts 將解釋它怴C
getopts 能以兩種方å¼å ±å‘ŠéŒ¯èª¤ã€‚如果 optstring 的第一-
茼r符是冒號,將使用 silent
安éœçš„éŒ¯èª¤å ±å‘Šã€‚é€šå¸¸çš„æ“作ä¸ï¼Œé‡åˆ°éžæ³•é¸é …或缺少é¸é …çš„åƒæ•¸æ™‚將列å°å‡º
診斷信æ¯ã€‚å¦‚æžœè®Šé‡ OPTERR 被è¨ç½®ç‚º 0ï¼Œä¸æœƒé¡¯ç¤ºéŒ¯èª¤æ¶ˆæ¯ï¼Œå³ä½¿
optstring 的第一茼rç¬¦ä¸æ˜¯å†’號。
如果發ç¾äº†ä¸€èŒ·D法的é¸é …, getopts å‘ name ä¸ç½®å…¥
?ï¼Œä¸¦ä¸”å¦‚æžœä¸æ˜¯å®‰éœæ¨¡å¼çš„話,列å°éŒ¯èª¤æ¶ˆæ¯ä¸¦å–消 OPTARG
的定義。如果 getopts æ˜¯å®‰éœæ¨¡å¼ï¼Œæ‰¾åˆ°çš„é¸é …å—符將置入 OPTAR A
䏿œƒåˆ—å°è¨ºæ–·æ¶ˆæ¯ã€‚
如果沒有找到需nçš„åƒæ•¸ï¼Œä¸¦ä¸” getopts 䏿˜¯å®‰éœæ¨¡å¼ï¼Œå°‡å‘ name
ç½®å…¥ä¸€èŒæ› (?)ï¼Œå–æ¶ˆ OPTARG 的定義,列å°å‡ºè¨ºæ–·æ¶ˆæ¯ã€‚如果
getopts æ˜¯å®‰éœæ¨¡å¼ï¼Œé‚£éº¼å°‡å‘ name 置入一茷_號 (:) 並且 OPTARG
å°‡è¨ç½®ç‚ºæ‰¾åˆ°çš„é¸é …å—符。
getopts
返回真,如果找到了指定的/未被指定的é¸é …。它返回å‡ï¼Œå¦‚æžœé‡åˆ°äº†é¸é …çµæŸ
或者發生了錯誤。
hash [-lr] [-p filename] [-dt] [name]
å°æ–¼æ¯ name, é€šéŽæœç´¢ $PATH
ä¸çš„目錄,找到命令的全路徑å並記錄它。如果給出了 -p
é¸é …ï¼Œä¸æœƒé€²è¡Œè·¯å¾‘æœç´¢ï¼Œç›´æŽ¥å°‡ filename 作為命令的全路徑å。é¸é …
-r 使得 shell 忘記所有已記錄的ä½ç½®ã€‚é¸é … -d 使得 shell
忘記已記錄的 name çš„ä½ç½®ã€‚如果給出了 -t é¸é …ï¼Œæ¯ name
å°æ‡‰çš„全路徑å被列å°å‡ºä¾†ã€‚如果給出多 name 作為 -t çš„åƒæ•¸ï¼Œname
將在已記錄的全路徑å 之å‰è¢«åˆ—å°å‡ºä¾†ã€‚é¸é … -l 使得輸出以一種å¯ä»¥-
å’±å³Žå€æ“—Jçš„æ ¼å¼é¡¯ç¤ºã€‚å¦‚æžœæ²’æœ‰çµ¦å‡ºåƒæ•¸ï¼Œ 或者åªçµ¦å‡ºäº† -l
é¸é …,已記錄的命令的信æ¯å°‡è¢«åˆ—å°å‡ºä¾†ã€‚ è¿”å›žçœŸï¼Œé™¤éž name
æ²’æœ‰æ‰¾åˆ°æˆ–çµ¦å‡ºäº†éžæ³•çš„é¸é …。
help [-s] [pattern]
顯示關於內建命令的有用的信æ¯ã€‚如果指定了 pattern ( ) A help
çµ¦å‡ºé—œæ–¼æ‰€æœ‰åŒ¹é… pattern
的命令的詳細幫助;å¦å‰‡æ‰€æœ‰å…§å»ºå‘½ä»¤çš„幫助和 shell
æŽ§åˆ¶çµæ§‹å°‡è¢«åˆ—å°å‡ºä¾†ã€‚ é¸é … -s 制信æ¯é¡¯ç¤ºç‚ºç°¡çŸçš„用法概n。 返回
0ï¼Œé™¤éžæ²’æœ‰åŒ¹é… pattern 的命令。
history [n]
history -c
history -d offset
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]
ä¸å¸¶é¸é …的話,顯示帶行號的命令æ·å²åˆ—表。列出的行ä¸å«æœ‰ *
的已經被蚹儮Lã€‚åƒæ•¸ n 使得åªé¡¯ç¤ºæœ€å¾Œ n 行。如果給出了 file-
nameï¼Œå®ƒè¢«ç”¨åšæ·å²æª”å;沒有的話,將使用 HISTFILE çš„-
@為æ·å²æª”å。é¸é …如果給出,則具有下列æ„義:
-c 清空æ·å²åˆ—表,刪除所有æ¢ç›®ã€‚
-d offset
刪除 offset ä½ç½®çš„æ·å²æ¢ç›®ã€‚
-a å°‡ ``æ–°'' çš„æ·å²æ¢ç›® (è‡ªç•¶å‰ bash 會話開始輸入的æ·å²å‘½ä»¤)
è¿½åŠ åˆ°æ·å²æª”案ä¸ã€‚
-n 將尚未從æ·å²æª”案ä¸è®€å–çš„æ·å²æ¢ç›®è®€å…¥ç•¶å‰æ·å²åˆ—表。這些行是當å‰
bash 會話開始之後,æ‰è¿½åŠ åˆ°æ·å²æª”案ä¸çš„行。
-r è®€å–æ·å²æª”案的內容,使用它怬@ç‚ºç•¶å‰æ·å²ã€‚
-w å°‡ç•¶å‰æ·å²åˆ—表寫入æ·å²æª”案,覆蓋æ·å²æª”案的鴞酗æ¼e。
-p å°å¾ŒçºŒçš„ args 進行æ·å²æ›¿æ›ï¼Œåœ¨æ¨™æº–è¼¸å‡ºä¸Šé¡¯ç¤ºçµæžœã€‚
䏿œƒå°‡çµæžœå˜å…¥æ·å²åˆ—è¡¨ã€‚æ¯ args éƒ½å¿…é ˆè¢«å¼•ç”¨ï¼Œä¾†ç¦æ¢
普通的命令擴展。
-s å°‡ args
ä¿å˜åˆ°æ·å²åˆ—表ä¸ï¼Œä½œç‚ºå–®ç¨çš„æ¢ç›®ã€‚æ·å²åˆ—表ä¸çš„æœ€å¾Œä¸€-
茤Rä»¤åœ¨æ·»åŠ args 之å‰è¢«åˆªé™¤ã€‚
返回 0,除éžé‡åˆ°äº†éžæ³•çš„é¸é …,讀/寫æ·å²æª”案發生錯誤,在 -d çš„
åƒæ•¸ä¸çµ¦å‡ºäº†ç„¡æ•ˆçš„ offsetï¼Œæˆ–è€…å° -p
çš„å¾ŒçºŒåƒæ•¸é€²è¡Œæ·å²æ“´å±•失敗。
jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]
第一種形å¼åˆ—出æ£åœ¨é‹è¡Œçš„作æ¥ã€‚é¸é …具有下列æ„義:
-l 普通信æ¯ä¹‹å¤–,列出進程ID。
-p åªåˆ—出作æ¥çš„進程組 leader 的進程ID。
-n åªé¡¯ç¤ºå¾žä¸Šæ¬¡ä½¿ç”¨è€…得知它-
æ€æ¼¯ç‰¯A之後,狀態發生改變的作æ¥çš„ä¿¡æ¯ã€‚
-r 制åªè¼¸å‡ºæ£åœ¨é‹è¡Œçš„作æ¥ã€‚
-s 制åªè¼¸å‡ºåœæ¢çš„作æ¥ã€‚
如果給出了 jobspec 輸出被制為僅æ¤ä½œæ¥çš„ä¿¡æ¯ã€‚ 返回
0,除éžé‡åˆ°äº†éžæ³•çš„é¸é …æˆ–çµ¦å‡ºäº†éžæ³•çš„ jobspec C
如果給出了 -x é¸é …ï¼Œä½œæ¥ jobs å°‡ command 或 args ä¸çš„任何 job-
spec 替æ›ç‚ºç›¸æ‡‰çš„進程組ID,執行 command A 傳éžåƒæ•¸ args
給它並返回它的退出狀態。
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l [sigspec | exit_status]
å‘以 pid 或 jobspec 為å的進程發é€å為 sigspec 或 signum
的信號。 sigspec å¯ä»¥æ˜¯ä¸€èŒ·H號å稱,類似 SIGKILL 或信號編號;
signum 是一茷H號編號。如果 sigspec 是一-
茷H號å稱,那麼å¯ä»¥æœ‰ï¼Œä¹Ÿå¯ä»¥æ²’有 SIG å‰ç¶´ã€‚如果沒有給出
sigspec A 那麼å‡è¨æ˜¯ SIGTER C åƒæ•¸ -l
將列出所有信號的å稱。如果給出 -l
æ™‚é‚„æœ‰ä»»ä½•åƒæ•¸ï¼Œå°‡åˆ—å‡ºåƒæ•¸å°æ‡‰çš„信號å稱,返回狀態 0。 -l çš„
exit_status åƒæ•¸æ˜¯ä¸€èšïš¶r,指定了一茷H號編號或被信號
終æ¢çš„進程的退出狀態C kill 返回真,如果至少æˆåŠŸç™¼é€äº†ä¸€-
茷H號,或者返回å‡ï¼Œå¦‚果發生了錯誤或é‡åˆ°äº† éžæ³•çš„é¸é …。
let arg [arg ...]
æ¯ arg 都是n求犖滼N表é”å¼ (åƒè¦‹ D(ARITHMETIC EVALUA-
TION) ç« ç¯€)ã€‚å¦‚æžœæœ€å¾Œä¸€èŒæŠ arg 求痕G是 0, let 返回
1ï¼›å¦å‰‡è¿”回 0。
local [option] [name[=value] ...]
å°æ¯èŒæŠï›N創建一茼W為 name 的局部變é‡ä¸¦è³¦äºˆ value C option
å¯ä»¥æ˜¯ä»»ä½• declare 接å—的Cç•¶ local 用於函數內部時,它使得變é‡
name 作用域局於函數和它的å進程。沒有æ“作數時, local
將局部變é‡çš„列表寫到標準輸出。ä¸åœ¨å‡½æ•¸å…§éƒ¨ä½¿ç”¨ local 會導-
P出錯。返回 0,除éžåœ¨å‡½æ•¸ä¹‹å¤–使用了 loca A çµ¦å‡ºäº†éžæ³•çš„ name A
或者 name 是一茈u讀的變é‡ã€‚
logout 退出登入 shell。
popd [-n] [+n] [-n]
從目錄棧ä¸åˆªé™¤æ¢ç›®ã€‚æ²’æœ‰åƒæ•¸çš„話,從棧ä¸åˆªé™¤é ‚層目錄,執行 cd
切æ›åˆ°æ–°çš„é ‚å±¤ç›®éŒ„ã€‚å¦‚æžœçµ¦å‡ºäº†åƒæ•¸ï¼Œæœ‰ä¸‹åˆ—çš„å«ç¾©ï¼š
+n 刪除 dirs 給出的列表ä¸å¾žå·¦æ•¸ç¬¬ n è“囓 (從 0
算起)。例如: ``popd +0'' 刪除第一茈媬, ``popd +1''
第二è‚C
-n 刪除 dirs 給出的列表ä¸å¾žå³æ•¸ç¬¬ n è“囓 (從 0
算起)。例如: ``popd -0'' 刪除最後一茈媬, ``popd -1''
刪除佷臚Gè‚C
-n 阻æ¢å¾žæ£§ä¸åˆªé™¤ç›®éŒ„之後改變目錄,這時åªå°æ£§é€²è¡Œæ“作。
如果命令 popd æˆåŠŸï¼Œé‚„n執行一 dir A 返回 0。 popd
返回å‡ï¼Œå¦‚æžœé‡åˆ°äº†éžæ³•çš„é¸é …,目錄棧為空,指定了目錄棧ä¸ä¸å˜åœ¨çš„æ¢ç›®ï¼Œ
或者改變目錄失敗。
printf format [arguments]
在 format æŽ§åˆ¶ä¸‹å°‡æ ¼å¼åŒ–çš„ arguments 寫到標準輸出。 format 是一-
茼r符串,包å«ä¸‰ç¨®é¡žåž‹çš„å°è±¡ï¼šæ™®é€šå—符,被簡單地
複製到標準輸出,轉義å—符,被轉æ›ä¸¦è¤‡è£½åˆ°æ¨™æº–è¼¸å‡ºï¼Œæ ¼å¼èªªæ˜Žï¼Œæ¯ä¸€-
都使得相鄰的下一 argument 被列å°å‡ºä¾†ã€‚ 在標準的 printf(1)
æ ¼å¼ä¹‹å¤–,%b 使得 printf 展開相應 arguments
ä¸çš„åæ–œæ§“轉義åºåˆ—,%q 使得 printf å°‡ 相應的 argument
以一種å¯ä»¥å’±å³Ž shell è¼¸å…¥çš„æ ¼å¼è¼¸å‡ºã€‚
format 在需n時被咱峞Aä»¥è™•ç†æ‰€æœ‰çš„ arguments。 如果 format 需-
n比所æä¾›çš„æ›´å¤šçš„ arguments, å¤šå‡ºçš„æ ¼å¼èªªæ˜Žè¦–為已經æä¾›äº†ç›¸æ‡‰çš„
0 峈臟r符串。 æˆåŠŸçš„è©±è¿”å›žïŸ¶O 0ï¼Œå¤±æ•—å‰‡æ˜¯éž 0 C
pushd [-n] [dir]
pushd [-n] [+n] [-n]
å°‡ç›®éŒ„æŽ¨å…¥ç›®éŒ„æ£§ï¼Œæˆ–è€…è¼ªæ›æ£§ä¸çš„å…§å®¹ï¼Œä½¿æ£§çš„é ‚éƒ¨æˆç‚ºç•¶å‰å·¥ä½œç›®éŒ„。
æ²’æœ‰åƒæ•¸æ™‚,交æ›é ‚部兩茈媬,返回
0,除éžç›®éŒ„æ£§ç‚ºç©ºã€‚å¦‚æžœçµ¦å‡ºäº†åƒæ•¸ï¼Œ 它怞釵p下å«ç¾©ï¼š
+n è¼ªæ›æ£§ä¸å…§å®¹ï¼Œä½¿å¾— dirs 給出的列表ä¸å¾žå·¦æ•¸ç¬¬ n 茈媬 (從
0 數起) æˆç‚ºç›®éŒ„æ£§çš„é ‚éƒ¨ã€‚
-n è¼ªæ›æ£§ä¸å…§å®¹ï¼Œä½¿å¾— dirs 給出的列表ä¸å¾žå³æ•¸ç¬¬ n 茈媬 (從
0 數起) æˆç‚ºç›®éŒ„æ£§çš„é ‚éƒ¨ã€‚
-n 阻æ¢å‘æ£§ä¸æ·»åŠ ç›®éŒ„ä¹‹å¾Œæ”¹è®Šç›®éŒ„ï¼Œé€™æ™‚åªå°æ£§é€²è¡Œæ“作。
dir æ·»åŠ dir åˆ°æ£§é ‚ï¼Œä½¿å¾—å®ƒæˆç‚ºæ–°çš„ç•¶å‰å·¥ä½œç›®éŒ„。
如果命令 pushd æˆåŠŸï¼Œé‚„n執行一 dir C 如果使用第一種形å¼ï¼Œ
pushd 返回 0ï¼Œé™¤éž cd 切æ›åˆ°ç›®éŒ„ dir 失敗。使用第二ä¸å½¢å¼æ™‚,
pushd 返回 0,除éžç›®éŒ„棧為空,指定了目錄棧ä¸ä¸å˜åœ¨çš„å…ƒç´ ï¼Œæˆ–è€…
切æ›åˆ°æŒ‡å®šçš„æ–°çš„ç•¶å‰ç›®éŒ„失敗。
pwd [-LP]
列å°ç•¶å‰å·¥ä½œç›®éŒ„的絕å°è·¯å¾‘å。如果給出了 -P
é¸é …,或者è¨ç½®äº†å…§å»ºå‘½ä»¤ set çš„ -o physical
é¸é …,列å°å‡ºçš„路徑åä¸ä¸æœƒåŒ…å«ç¬¦è™ŸéˆæŽ¥ã€‚如果使用了 -L
é¸é …,列å°å‡ºçš„路徑ä¸å¯èƒ½åŒ…å«ç¬¦è™ŸéˆæŽ¥ã€‚ 返回
0,除éžåœ¨è®€å–ç•¶å‰ç›®éŒ„åæ™‚å‡ºéŒ¯æˆ–çµ¦å‡ºäº†éžæ³•çš„é¸é …。
read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d
delim] [name ...]
從標準輸入讀入一行,或從 -u é¸é …çš„åƒæ•¸ä¸çµ¦å‡ºçš„æª”案æz符 fd ä¸
讀å–,第一茧被賦予第一 name, 第二茧被賦予第二 name,
以æ¤é¡žæŽ¨ï¼Œå¤šé¤˜çš„詞和其間的分隔符被賦予最後一 name.
如果從輸入æµè®€å…¥çš„詞數比å稱數少,剩餘的å稱被賦予空C IFS
ä¸çš„å—符被用來將行拆分æˆè©žã€‚ åæ–œæ§“å—符 (\)
被用於刪除讀å–的下一å—符的特殊å«ç¾©ï¼Œä»¥åŠçºŒè¡Œã€‚
如果給出了é¸é …,將包å«ä¸‹åˆ—å«ç¾©ï¼š
-a aname
è©žè¢«è³¦ä»¥æ•¸çµ„è®Šé‡ aname 的連續的下標,從 0 開始。在賦新-
妨e, aname è¢«å–æ¶ˆå®šç¾©ã€‚å…¶ä»– name åƒæ•¸è¢«å¿½ç•¥ã€‚
-d delim
delim 的第一茼rç¬¦è¢«ç”¨æ–¼çµæŸè¼¸å…¥è¡Œï¼Œè€Œä¸æ˜¯æ–°è¡Œç¬¦ã€‚
-e 如果標準輸入來自終端,將使用 readline (åƒè¦‹ä¸Šæ‚¸ READLINE
ç« ç¯€) 來ç²å¾—輸入行。
-n nchars
read 讀入 nchars 茼rç¬¦å¾Œè¿”å›žï¼Œè€Œä¸æ˜¯ç‰å¾…一整行輸入。
-p prompt
讀å–任何輸入之å‰ï¼Œåœ¨æ¨™æº–錯誤顯示æç¤º
prompt,末尾沒有新行符。
æç¤ºåªæœ‰åœ¨è¼¸å…¥ä¾†è‡ªçµ‚ç«¯æ™‚æ‰æœƒé¡¯ç¤ºã€‚
-r åæ–œæ§“ä¸ä½œç‚ºè½‰ç¾©å—ç¬¦ã€‚åæ–œæ§“被èªç‚ºè¡Œçš„一部分。特殊地,一å°å斜槓-新行符ä¸ä½œç‚ºçºŒè¡Œã€‚
-s å®‰éœæ¨¡å¼ã€‚如果輸入來自終端,å—ç¬¦å°‡ä¸æœƒå›žé¡¯ã€‚
-t timeout
使得 read 超時並返回失敗,如果在 timeout
秒內沒有讀入完整的一行輸入。 如果 read
䏿˜¯å¾žçµ‚端或管é“讀å–è¼¸å…¥ï¼Œé‚£éº¼é€™èš‡é¾ ç´«L效。
-u fd 從檔案æz符 fd ä¸è®€å–輸入。
如果沒有給出 names A 讀å–çš„ä¸€è¡Œå°‡è³¦äºˆè®Šé‡ REPLY。 返回O
0,除éžé‡åˆ°äº† EOF,readP y -u
C
readonly [-apf] [name ...]
給出的 name 將被標記為åªè®€çš„ï¼› names 的ㄞ鈳Q後來的賦-
ï …y奿”¹è®Šã€‚如果給出了 -f é¸é …,names å°æ‡‰çš„函數也被標記。é¸é … -a
制變é‡åªèƒ½æ˜¯æ•¸çµ„類型。如果沒有給出 name åƒæ•¸ï¼Œæˆ–者如果給出了 -p
é¸é …ï¼Œå°‡åˆ—å°æ‰€æœ‰åªè®€çš„å稱。é¸é … -p 使得輸出以一種å¯ä»¥è¢«-
å¥sç”¨ä½œè¼¸å…¥çš„æ ¼å¼é¡¯ç¤ºã€‚ 返回O 0,除éžé‡åˆ°äº†éžæ³•çš„é¸é …, names
之䏀䏿˜¯æœ‰æ•ˆçš„ shell 變é‡å,或é¸é … -f ä¸çµ¦å‡ºçš„ name 䏿˜¯ä¸€-
茖è»ïš±C
return [n]
使得一茖è»ïšµH指定 n 退出。如果忽略了 n A
返回狀態是函數體ä¸åŸ·è¡Œçš„æœ€å¾Œä¸€-
茤R令的退出狀態。如果在函數外使用,但是是在一茈H . (source)
命令執行的稿本內,它使得 shell 䏿¢åŸ·è¡Œç¨¿æœ¬ï¼Œè¿”回 n
或稿本ä¸åŸ·è¡Œçš„æœ€å¾Œä¸€-
茤Rä»¤çš„é€€å‡ºç‹€æ…‹ã€‚å¦‚æžœåœ¨å‡½æ•¸å¤–ä½¿ç”¨ï¼Œä¸¦ä¸”ä¸æ˜¯åœ¨ä»¥ .
執行的稿本內,返回狀態是å‡ã€‚
set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
ä¸å¸¶é¸é …時,shell 變é‡çš„å稱和N以一種å¯ä»¥å’±å³Žå€æ“—Jçš„æ ¼å¼é¡¯ç¤ºã€‚
è¼¸å‡ºæ ¹æ“šç•¶å‰èªžè¨€ç’°å¢ƒé€²è¡ŒæŽ’åºã€‚指定了é¸é …的時唌A它æŠ]ç½®æˆ–å–æ¶ˆäº†
shell 的屬性。 處ç†å®Œé¸é …ä¹‹å¾Œå‰©é¤˜çš„ä»»ä½•åƒæ•¸éƒ½è¢«ä½œç‚ºä½ç½®åƒæ•¸çš„-
Q賦A分別賦予 $1, $2, ... $n.
如果給出了é¸é …,那麼具有以下å«ç¾©ï¼š
-a 自動將被-
èš¹é´å¸ è¡Žå ›ç˜åƒ†q和函數標誌為導出至後續命令的環境ä¸ã€‚
-b I景作æ¥çµæŸæ™‚ç«‹å³å ±å‘Šç‹€æ…‹ï¼Œè€Œä¸æ˜¯åœ¨ä¸‹æ¬¡é¡¯ç¤ºä¸»æç¤ºç¬¦å‰å ±å‘Šã€‚åªæœ‰åœ¨å•Ÿç”¨ä½œæ¥æŽ§åˆ¶æ™‚æ‰æœ‰æ•ˆã€‚
-e ç«‹å³é€€å‡ºï¼Œå¦‚æžœ simple command (簡單命令,åƒè¦‹ä¸Šæ‚¸ SHELL
GRAMMAR k) 以éžé›¶ïŸºh出。shell
䏿œƒé€€å‡ºï¼Œå¦‚果失敗的命令是 until 或 while 循環的一部分,
if 語å¥çš„一部分, && 或 || åºåˆ—的一部分,或者命令的返回-
Oç”± ! 翻轉得到。é‡å° ERR 的陷阱,如果è¨ç½®çš„話,將在
shell 退出å‰åŸ·è¡Œã€‚
-f ç¦æ¢è·¯å¾‘擴展。
-h 在查找並執行命令時,記ä½å®ƒæ€æ¼²é¼½m。這是é è¨å•Ÿç”¨çš„。
-k 所有以賦-
ï …yå¥å½¢å¼å‡ºç¾çš„åƒæ•¸éƒ½è¢«åŠ å…¥åˆ°å‘½ä»¤åŸ·è¡Œçš„ç’°å¢ƒä¸ï¼Œä¸åƒ…是命令åå‰-
惆漕ïŽC
-m 監視模å¼ã€‚ä½œæ¥æŽ§åˆ¶è¢«å•Ÿç”¨ã€‚åœ¨æ”¯æŒé€™-
èš‡é¾ ç”æ¼•tçµ±ä¸ï¼Œå®ƒåœ¨äº¤äº’ shell 䏿˜¯é è¨å•Ÿç”¨çš„ (åƒè¦‹ä¸Šæ‚¸
JOB CONTROL C
I景進程在單ç¨çš„進程組ä¸é‹è¡Œï¼ŒçµæŸæ™‚將列å°å‡ºåŒ…å«å®ƒ-
怜h出狀態的一行信æ¯ã€‚
-n 讀å–命令,但ä¸åŸ·è¡Œã€‚這å¯ä»¥ç”¨åœ¨æª¢æŸ¥ shell
稿本ä¸çš„語法錯誤。交互 shell ä¸å®ƒè¢«å¿½ç•¥ã€‚
-o option-name
option-name å¯ä»¥æ˜¯å¦‚下之一:
allexport
與 -a 相åŒã€‚
braceexpand
與 -B 相åŒã€‚
emacs 使用 emacs 樣å¼çš„命令行編輯界情Cé€™èš‡é¾ ç–b交互
shell ä¸é è¨å•Ÿç”¨ï¼Œé™¤éž shell 以 --noediting
é¸é …啟動。
errexit 與 -e 相åŒã€‚
hashall 與 -h 相åŒã€‚
histexpand
與 -H 相åŒã€‚
history å…許記錄命令æ·å²ï¼Œå¦‚上z HISTORY ä¸çš„æz。這-
èš‡é¾ ç–b交互 shell ä¸é è¨å•Ÿç”¨ã€‚
ignoreeof
它的效果是好åƒå·²ç¶“執行了 shell 命令
``IGNOREEOF=10'' 一樣 (åƒè¦‹ä¸Šæ‚¸ Shell Variables
q C
keyword 與 -k 相åŒã€‚
monitor 與 -m 相åŒã€‚
noclobber
與 -C 相åŒã€‚
noexec 與 -n 相åŒã€‚
noglob 與 -f 相åŒã€‚ nolog ç•¶å‰è¢«å¿½ç•¥ã€‚
notify 與 -b 相åŒã€‚
nounset 與 -u 相åŒã€‚
onecmd 與 -t 相åŒã€‚
physical
與 -P 相åŒã€‚
posix 如果é è¨æ“作與 POSIX 1003.2 ä¸åŒçš„話,改變 bash
的行為,來滿足標準 (posix mode)。
privileged
與 -p 相åŒã€‚
verbose 與 -v 相åŒã€‚
vi 使用 vi 樣å¼çš„命令行編輯界情C
xtrace 與 -x 相åŒã€‚
如果給出了ä¸å¸¶ option-name çš„ -o é¸é …,當å‰é¸é …çš„-
N被列å°å‡ºä¾†ã€‚如果給出了ä¸å¸¶ option-name çš„ +o
é¸é …,將在標準輸出顯示一系列å¯ä»¥åž‚媟礅eé¸é …è¨å®šçš„ set
命令。
-p 打開 privileged mode ( S v ) C 在這èšç‹¾ï¹žä¸‘A䏿œƒè™•ç†
$ENV 和 $BASH_ENV 檔案,shell
å‡½æ•¸ä¸æœƒå¾žç’°å¢ƒä¸ç¹¼æ‰¿ï¼Œç’°å¢ƒä¸å¦‚æžœæœ‰è®Šé‡ SHELLOPT A
也將被忽略。如果 shell 啟動時的有效使用者(組) ID
與真實使用者(組) ID ä¸åŒï¼Œä¸¦ä¸”沒有給出 -p é¸é …,
將執行這些æ“作,有效使用者 ID å°‡è¨ç½®ç‚ºçœŸå¯¦ä½¿ç”¨è€…
ID。如果啟動是給出了 -p é¸é …,有效使用者 ID 䏿œƒ 被-
å§œmã€‚å°‡é€™èš‡é¾ è…•é¶¶æ´§ç‚±o有效使用者和組 ID
被è¨ç½®ç‚ºçœŸå¯¦ä½¿ç”¨è€…和組 ID。
-t 讀å–並執行一茤R令之後退出。
-u åœ¨é€²è¡Œåƒæ•¸æ“´å±•時,將未定義的變é‡ä½œç‚ºéŒ¯èª¤ã€‚如果試圖擴展未定義的變é‡ï¼Œshell
將輸出一æ¢éŒ¯èª¤æ¶ˆæ¯; 如果是éžäº¤äº’çš„ shell,shell
將以éžé›¶ïŸºh出。
-v 在讀å–è¼¸å…¥çš„åŒæ™‚列å°å‡ºä¾†ã€‚
-x 擴展æ¯èš‹çœ¾ç’ˆR令之後,顯示 PS4 çš„-
AæŽ¥è‘—é¡¯ç¤ºå‘½ä»¤å’Œå®ƒæ“´å±•å¾Œçš„åƒæ•¸ã€‚
-B shell 執行花括號擴展 (åƒè¦‹ä¸Šæ‚¸ Brace Expansion C
這是é è¨å…許的。
-C 如果è¨ç½®çš„話, bash 使用咿w呿“作符 >, >&, å’Œ <>
æ™‚ï¼Œä¸æœƒè¦†è“‹å·²å˜åœ¨çš„æª”案。å¯ä»¥ä½¿ç”¨å’¿w呿“作符 >| 代替 >
來創建輸出檔案,從而繞éŽé€™èŒ–謘C
-H å…許 Enable ! 樣å¼çš„æ·å²æ›¿æ›ã€‚在交互 shell ä¸é€™-
èš‡é¾ ç‹Oé è¨å•Ÿç”¨çš„。
-P 如果è¨ç½®çš„話,shell 在執行類似 cd
的,改變當å‰å·¥ä½œç›®éŒ„çš„å‘½ä»¤æ™‚ï¼Œä¸æœƒè·Ÿéš¨ç¬¦è™Ÿé€£æŽ¥ã€‚它將使用物ç†çš„ç›®éŒ„çµæ§‹ä¾†ä»£æ›¿ã€‚é è¨æƒ…æ³ä¸‹ï¼Œ
bash 在執行改變當å‰ç›®éŒ„的命令時跟隨路徑的é‚輯éˆã€‚
-- 如果這-
èš‡é¾ çSæœ‰åƒæ•¸ï¼Œå°‡å–消ä½ç½®åƒæ•¸çš„定義。å¦å‰‡ï¼Œä½ç½®åƒæ•¸å°‡è¨ç½®ç‚º
arg,å³ä½¿å®ƒæ€šH - 開始。
- é€šçŸ¥ä¿¡è™Ÿçš„çµæŸï¼Œä½¿å¾—所有剩餘的 arg 被賦予ä½ç½®åƒæ•¸ã€‚ -x
å’Œ -v é¸é …被關閉。如果沒有 arg,ä½ç½®åƒæ•¸å°‡ä¸æœƒæ”¹è®Šã€‚
é€™èš‡é¾ çµ¦wè¨æ˜¯é—œé–‰çš„,除éžå¦å¤–說明。使用 + è€Œä¸æ˜¯ -
使得這些é¸é …被關閉。é¸é …都å¯ä»¥ä½œç‚ºåƒæ•¸ï¼Œ 在 shell
啟動時指定。當å‰çš„é¸é …集åˆå¯ä»¥å¾ž $- 找到。返回-
ï ‹`是真,除éžé‡åˆ°äº†éžæ³•çš„é¸é …。
shift [n]
從 n+1 ... é–‹å§‹çš„é¸é …被咿Rå為 $1 .... 從 $# å‘下直到 $#-n+1
çš„é¸é …è¢«å–æ¶ˆå®šç¾©ã€‚ n å¿…é ˆæ˜¯éžtæ•´æ•¸ï¼Œå°æ–¼æˆ–ç‰æ–¼ $#。如果 n 是
0ï¼Œä¸æœƒæ”¹è®Šåƒæ•¸ã€‚如果沒有給出 n A å°±å‡å®šå®ƒæ˜¯ 1。如果 n 比 $#
大,ä½ç½®åƒæ•¸ä¸æœƒæ”¹è®Šã€‚返回jæ–¼ 0,如果 n 比 $# å¤§æˆ–å°æ–¼
0ï¼›å¦å‰‡è¿”回 0。
shopt [-pqsu] [-o] [optname ...]
å°æ–¼æŽ§åˆ¶å¯é¸çš„ shell 行為的變é‡ï¼Œæ”¹è®Šå®ƒæ€ç˜“。沒有é¸é …或者有 -p
é¸é …時,將顯示所有å¯è¨ç½®çš„é¸é …列表,以åŠå®ƒæ€“Oå¦å·²ç¶“è¨ç½®çš„æŒ‡ç¤ºã€‚
-p 使得輸出以一種å¯ä»¥è¢«å’±å³Žå€æ“—J的形å¼é¡¯ç¤ºã€‚
å…¶ä»–é¸é …有如下å«ç¾©ï¼š
-s å…許(è¨ç½®) æ¯ optname。
-u ç¦æ¢(å–æ¶ˆ) æ¯ optname。
-q ç¦æ¢é€šå¸¸çš„輸出 (å®‰éœæ¨¡å¼);返回狀態指示了 optname
是å¦è¢«è¨ç½®ã€‚ å¦‚æžœå° -q 給出了多 optname åƒæ•¸ï¼Œå¦‚果所有
optname 都被å…許,返回N是 0ï¼› å¦å‰‡è¿”回éžé›¶ïŸ«C
-o 制 optname çš„ïŸ¶é™˜æ¾ˆå œR令 set çš„ -o é¸é …定義的C
如果使用 -s 或 -u 時沒有給出 optname åƒæ•¸ï¼Œé¡¯ç¤ºå°‡åˆ†åˆ¥-
於被è¨ç½®æˆ–è¢«å–æ¶ˆçš„é¸é …。 除éžå¦å¤–說明,shopt
é¸é …é è¨è¢«ç¦æ¢(å–æ¶ˆ)。
返回b列出é¸é …時是 0,如果所有 optname
都被å…許的話,å¦å‰‡æ˜¯éžé›¶ïŸ«C ç•¶è¨ç½®æˆ–å–æ¶ˆé¸é …時,返回O 0,除éž
optname æ˜¯éžæ³•çš„ shell é¸é …。
shopt é¸é …的列表是:
cdable_vars
如果è¨ç½®çš„話,內建命令 cd
çš„åƒæ•¸å¦‚æžœä¸æ˜¯ç›®éŒ„,就å‡å®šæ˜¯ä¸€èš¥åƒ†q,它的O-
n切æ›åˆ°çš„目錄å。
cdspell 如果è¨ç½®çš„話, cd
命令ä¸ç›®éŒ„çš„ç´°å¾®æ‹¼å¯«éŒ¯èª¤èƒ½å¤ å¾—ä»¥ç³¾æ£ã€‚檢查的錯誤包括å—符錯ä½ï¼Œç¼ºå—符,
契_輸入åŒä¸€å—符。如果找到了æ£ç¢ºçš„-
Aå°‡åˆ—å°æ£ç¢ºçš„æª”å,命令將繼續。 é€™èš‡é¾ ç‰u能在交互
shell ä¸ä½¿ç”¨ã€‚
checkhash
如果è¨ç½®çš„話,bash
åœ¨åŸ·è¡Œå‘½ä»¤å‰æª¢æ¸¬æ•£åˆ—表ä¸çš„命令是å¦å˜åœ¨ã€‚ 如果一-
茬Q散列的命令ä¸å†å˜åœ¨ï¼Œå°‡é€²è¡Œæ£å¸¸çš„路徑æœç´¢ã€‚
checkwinsize
如果è¨ç½®çš„話,bash åœ¨æ¯æ¢å‘½ä»¤åŸ·è¡Œå¾Œæª¢æ¸¬è¦–窗大å°ï¼Œå¦‚果需-
n的話就更新 LINES 和 COLUMNS 的C
cmdhist 如果è¨ç½®çš„話, bash 試著將一茼h行命令的所有行放到åŒä¸€-
èšžå²æ¢ç›®ä¸ã€‚這樣使得 多行命令å¯ä»¥å®¹æ˜“地å¥s蚹鵅C
dotglob 如果è¨ç½®çš„話, bash 會把以 `.'
開始的檔å包å«åœ¨è·¯å¾‘åæ“´å±•çš„çµæžœä¸ã€‚
execfail
如果è¨ç½®çš„話,éžäº¤äº’çš„ shell
如果ä¸èƒ½åŸ·è¡Œä½œç‚ºåƒæ•¸æä¾›çµ¦å…§å»ºå‘½ä»¤ exec
çš„æª”æ¡ˆæ™‚å°‡ä¸æœƒé€€å‡ºã€‚交互的 shell 在 exec
å¤±æ•—æ™‚ä¸æœƒé€€å‡ºã€‚
expand_aliases
如果è¨ç½®çš„話,別å被擴展,就åƒä¸Š ALIASES
ä¸è¬›åˆ°çš„ä¸€æ¨£ã€‚é€™èš‡é¾ ç–b交互 shell 䏿˜¯é è¨å•Ÿç”¨çš„。
extglob 如果è¨ç½®çš„話,將å…許上 Pathname Expansion
ä¸æåˆ°çš„æ“´å±•æ¨¡å¼åŒ¹é…特性。
histappend
如果è¨ç½®çš„話,在 shell 退出時,æ·å²åˆ—è¡¨å°‡è¿½åŠ åˆ°ä»¥ HIST-
FILE 的隻Wçš„æª”æ¡ˆä¹‹å¾Œï¼Œè€Œä¸æ˜¯è¦†è“‹æª”案。
histreedit
如果è¨ç½®çš„話,並且æ£åœ¨ä½¿ç”¨ readlin A 使用者å¯ä»¥å¥s-
èš¹é´·ï¼’æ‚›ç‘£å²æ›¿æ›ã€‚
histverify
如果è¨ç½®çš„話,並且æ£åœ¨ä½¿ç”¨ readlin A
æ·å²æ›¿æ›çš„çµæžœä¸æœƒç«‹å³å‚³çµ¦ shell è§£é‡‹å™¨ã€‚çµæžœè¡Œè¢«åŠ è¼‰åˆ°
readline 編輯緩沖å€ï¼Œå…許進行進一æ¥çš„蚹鵅C
hostcomplete
如果è¨ç½®çš„話,並且æ£åœ¨ä½¿ç”¨ readlin A bash
å°‡è©¦è‘—å°æ£åœ¨é€²è¡Œè£œå…¨çš„åŒ…å« çš„è©žé€²è¡Œä¸»æ©Ÿå補全 (åƒè¦‹ä¸Š-
悸 READLINE ä¸çš„ Completing 段è½)。這是é è¨å…許的。
huponexit
如果è¨ç½®çš„話,在交互的登入 shell 退出時 bash
將呿‰€æœ‰ä½œæ¥ç™¼å‡º SIGHUP 信號。
interactive_comments
如果è¨ç½®çš„話,將å…許在交互 shell ä¸é‡åˆ°ä»¥ #
é–‹é çš„è©žæ™‚å¿½ç•¥é€™èŒ§å’Œä¸€è¡Œä¸æ‰€æœ‰å‰©é¤˜çš„å—符 (åƒè¦‹ä¸Šæ‚¸
COMMENTS C é€™èš‡é¾ ç‹Oé è¨å…許的。
lithist 如果è¨ç½®çš„話,並且å…許了 cmdhist
é¸é …,多行的命令在ä¿å˜åˆ°æ·å²ä¸æ™‚å°‡åŒ…å«æ–°è¡Œç¬¦ï¼Œè€Œä¸æ˜¯åœ¨å¯èƒ½çš„地方使用分號。
login_shell
如果 shell 作為登入 shell 啟動,將è¨ç½®é€™èš‡é¾ (åƒè¦‹ä¸Šæ‚¸
(INVOCATION) C 這蚧ä¸å¯èš¹éµ…C
mailwarn
如果è¨ç½®çš„話,並且 bash
æ£åœ¨æª¢æ¸¬ä¸Šæ¬¡æª¢æ¸¬ä»¥ä¾†è¢«å˜å–éŽçš„郵件, 將顯示 ``The mail
in mailfile has been read''(mailfile ä¸çš„郵件已被讀å–)。
no_empty_cmd_completion
如果è¨ç½®çš„話,並且æ£åœ¨ä½¿ç”¨ readlin A
試圖在空行上執行補全時, bash 䏿œƒæœç´¢ PATH
來查找å¯èƒ½çš„補全。
nocaseglob
如果è¨ç½®çš„話, bash
進行路徑擴展時使用大å°å¯«ä¸æ•感方å¼åŒ¹é…檔å(åƒè¦‹ä¸Šæ‚¸
Pathname Expansion i C
nullglob
如果è¨ç½®çš„話, bash
å°‡å…許ä¸åŒ¹é…ä»»ä½•æª”æ¡ˆçš„æ¨¡å¼æ“´å±•為空å—ç¬¦ä¸²è€Œä¸æ˜¯å®ƒæ€žè¬-
(åƒè¦‹ä¸Šæ‚¸ Pathname Expansion i C
progcomp
如果è¨ç½®çš„話,將啟用å¯ç·¨ç¨‹è£œå…¨åŠŸèƒ½ (åƒè¦‹ä¸Šæ‚¸ Pro-
grammable Completion)。 é€™èš‡é¾ ç‹Oé è¨å•Ÿç”¨çš„。
promptvars
如果è¨ç½®çš„話,æç¤ºå—符串nç¶“éŽä¸Š PROMPTING 䏿-
z的擴展,然後還nç¶“éŽè®Šé‡å’Œåƒæ•¸æ“´å±•。這-
èš‡é¾ ç‹Oé è¨å•Ÿç”¨çš„。
restricted_shell
shell è¨ç½®é€™èš‡é¾ 窗Aå¦‚æžœå®ƒæ˜¯ä»¥å—æ¨¡å¼å•Ÿç”¨çš„ (åƒè¦‹ä¸‹æ‚¸ -
shell(RESTRICTED SHELL) ç« ç¯€)。這蚧ä¸èƒ½-
蚹鵅Cåœ¨åŸ·è¡Œå•Ÿå‹•æª”æ¡ˆæ™‚ï¼Œå®ƒä¸æœƒè¢«å§œm,使得啟動檔案å¯ä»¥
得知 shell æ˜¯å¦æ˜¯å—的。
shift_verbose
如果è¨ç½®çš„話,內建命令 shift 在åç§»é‡è¶…éŽä½ç½®åƒæ•¸çš„-
èšïš¾çаCå°ä¸€æ¢éŒ¯èª¤æ¶ˆæ¯ã€‚
sourcepath
如果è¨ç½®çš„話,內建命令 source (.) 使用 PATH ä¸çš„-
茯d找包å«ä½œç‚ºåƒæ•¸çµ¦å‡ºçš„æª”æ¡ˆã€‚é€™èš‡é¾ çµ¦wè¨æ˜¯å•Ÿç”¨çš„。
xpg_echo
如果è¨ç½®çš„話,內建命令 echo é è¨æ“´å±•åæ–œæ§“轉義åºåˆ—。
suspend [-f]
掛起 shell 的執行,直到收到一 SIGCONT 信號。é¸é … -f
表示如果這是一茧nå…¥ shell,那麼ä¸næç¤ºï¼Œç›´æŽ¥æŽ›èµ·ã€‚返回O
0ï¼Œé™¤éž shell 是登入 shell 並且沒有指定 - A
æˆ–è€…æ²’æœ‰å•Ÿç”¨ä½œæ¥æŽ§åˆ¶ã€‚
test expr
[ expr ]
返回狀態 0 或 1ï¼Œæ ¹æ“šæ¢ä»¶è¡¨é”å¼ expr 的求茤w。æ¯-
蚞犑@符和æ“ä½œæ•¸éƒ½å¿…é ˆæ˜¯ä¸€èŒ¬çžˆWçš„åƒæ•¸ã€‚表é”å¼ä½¿ç”¨ä¸Š
(CONDITIONAL EXPRESSIONS) ä¸çš„æ“ä½œæ§‹é€ ã€‚
表é”å¼å¯ä»¥ç”¨ä¸‹åˆ—æ“作符çµåˆï¼Œä»¥å„ªå…ˆç´šçš„飢ï“C出。
! expr åºu,如果 expr 為å‡ã€‚
( expr )
返回 expr 的C括號å¯ä»¥ç”¨ä¾†è¶…è¶Šæ“作符的一般優先級。
expr1 -a expr2
åºu,如果 expr1 å’Œ expr2 都為真。
expr1 -o expr2
åºu,如果 expr1 或 expr2 為真。
test å’Œ [ ä½¿ç”¨åŸºæ–¼åƒæ•¸èšïšºæ¼±@系列è¦å‰‡ï¼Œå°æ¢ä»¶è¡¨é”å¼é€²è¡Œæ±‚C
0 arguments
表é”å¼ç‚ºå‡ã€‚
1 argument
表é”å¼ç‚ºçœŸï¼Œç•¶ä¸”åƒ…ç•¶åƒæ•¸éžç©ºã€‚
2 arguments
å¦‚æžœç¬¬ä¸€èŒæŠïš¼O !,表é”å¼ç‚ºçœŸï¼Œç•¶ä¸”åƒ…ç•¶ç¬¬äºŒèŒæŠïš¼é«˜ç¦³C
å¦‚æžœç¬¬ä¸€èŒæŠïš¼O上 (CONDITIONAL EXPRESSIONS)
ä¸åˆ—出的單目æ¢ä»¶é‹ç®—符之一,表é”å¼ç‚ºçœŸï¼Œç•¶ä¸”僅當單目測試為真。
å¦‚æžœç¬¬ä¸€èŒæŠïš´ã„›Oåˆæ³•的單目æ¢ä»¶é‹ç®—符,表é”å¼ç‚ºå‡ã€‚
3 arguments
å¦‚æžœç¬¬äºŒèŒæŠïš¼O上 (CONDITIONAL EXPRESSIONS)
ä¸åˆ—出的二進制æ¢ä»¶æ“作符之一,表é”å¼çš„çµæžœæ˜¯ä½¿ç”¨ç¬¬ä¸€å’Œç¬¬ä¸‰-
èŒæŠïš·@為æ“ä½œæ•¸çš„äºŒé€²åˆ¶æ¸¬è©¦çš„çµæžœã€‚ å¦‚æžœç¬¬ä¸€èŒæŠïš¼O
!,表é”å¼ïŸ¶Oä½¿ç”¨ç¬¬äºŒå’Œç¬¬ä¸‰èŒæŠï›†iè¡Œé›™åƒæ•¸æ¸¬è©¦çš„çµæžœå–å。
å¦‚æžœç¬¬ä¸€èŒæŠïš¼O (ï¼Œç¬¬ä¸‰èŒæŠïš¼O )ï¼Œçµæžœæ˜¯å°ç¬¬äºŒ-
èŒæŠï›†iè¡Œå–®åƒæ•¸æ¸¬è©¦çš„çµæžœã€‚ å¦å‰‡ï¼Œè¡¨é”å¼ç‚ºå‡ã€‚這種情æ³ä¸‹
-a å’Œ -o æ“作符被èªç‚ºäºŒé€²åˆ¶æ“作符。
4 arguments
å¦‚æžœç¬¬ä¸€èŒæŠïš¼O
!ï¼Œçµæžœæ˜¯ç”±å‰©é¤˜åƒæ•¸çµ„æˆçš„ä¸‰åƒæ•¸è¡¨é”å¼çµæžœå–å。
å¦å‰‡ï¼Œè¡¨é”å¼è¢«æ ¹æ“šä¸Šæƒ˜C出的優先級è¦å‰‡è§£é‡‹ä¸¦åŸ·è¡Œã€‚
5 或更多 arguments
表é”å¼è¢«æ ¹æ“šä¸Šæƒ˜C出的優先級è¦å‰‡è§£é‡‹ä¸¦åŸ·è¡Œã€‚
times å° shell ä»¥åŠ shell é‹è¡Œçš„進程,列å°ç´¯p的使用者和系統時間。
返回狀態是 0。
trap [-lp] [arg] [sigspec ...]
當 shell 收到信號 sigspec 時,命令 arg
將被讀å–並執行。如果沒有給出 arg 或者給出的是 -,
所有指定的信號被è¨ç½®ç‚ºå®ƒæ€æ¼¯é´l (進入 shell 時它æ€ç˜“)。如果 arg
是空å—符串, sigspec 指定的信號被 shell 和它啟動的命令忽略。如果
arg ä¸å˜åœ¨ï¼Œä¸¦ä¸”給出了 -p é‚£éº¼èˆ‡æ¯ sigspec
相關è¯çš„é™·é˜±å‘½ä»¤å°‡è¢«é¡¯ç¤ºå‡ºä¾†ã€‚å¦‚æžœæ²’æœ‰çµ¦å‡ºä»»ä½•åƒæ•¸ï¼Œæˆ–åªçµ¦å‡ºäº†
- A trap 將列å°å‡ºèˆ‡æ¯èŒ·Hè™Ÿç·¨è™Ÿç›¸é—œçš„å‘½ä»¤åˆ—è¡¨ã€‚æ¯ sigspec
å¯ä»¥æ˜¯ <signal.h> 定義的信號å,或是一茷H號編號。 如果 sigspec
是 EXIT (0),命令 arg 將在 shell 退出時執行。如果 sigspec 是
DEBUG, 命令 arg 將在æ¯èš‹çœ¾ç’ˆR令 (simple command,åƒè¦‹ä¸Šæ‚¸ SHELL
GRAMMAR) 之後執行。如果 sigspec 是 ERR, 命令 arg
將在任何命令以éžé›¶ïŸºh出時執行。如果失敗的命令是 until 或 while
循環的一部分, if 語å¥çš„一部分, && 或 ||
åºåˆ—的一部分,或者命令的返回Oé€šéŽ ! 轉化而來, ERR
é™·é˜±å°‡ä¸æœƒåŸ·è¡Œã€‚é¸é … -l 使得 shell 列å°ä¿¡è™Ÿåå’Œå°æ‡‰ç·¨è™Ÿçš„列表。
shell 忽略的信號ä¸èƒ½è¢«æ•æ‰æˆ–-
å§œm。在å進程ä¸ï¼Œè¢«æ•æ‰çš„信號在進程創建時被姜m為åˆå§‹ïŸ«C 返回-
å½ç“·A如果 sigspec éžæ³•ï¼›å¦å‰‡ trap 返回真。
type [-aftpP] name [name ...]
沒有é¸é …æ™‚ï¼ŒæŒ‡ç¤ºæ¯ name 將如何被解釋,如果用作一-
茤R令å。如果使用了 -t é¸é …, type 列å°ä¸€-
茼r符串,內容是如下之一: alias, keyword, function, builtin, 或
file A 如果 name 分別是一èOå,shell
ä¿ç•™å—,函數,內建命令或ç£ç¢Ÿæª”案。如果沒有找到 name A
é‚£éº¼ä¸æœƒåˆ—å°ä»»ä½•æ±è¥¿ï¼Œè¿”回退出狀態å‡ã€‚如果使用了 -p é¸é …, type
返回如果 name 作為命令å,將被執行的ç£ç¢Ÿæª”å;或者返回空,如果
``type -t name'' 䏿œƒè¿”回 file. é¸é … -P é¸é …å¼·åˆ¶å°æ¯ name æœç´¢
PAT A å³ä½¿ ``type -t name'' 䏿œƒè¿”回 file. 如果命令在散列ä¸ï¼Œ
-p å’Œ -P å°‡åˆ—å°æ•£åˆ—的Aè€Œä¸æ˜¯ PATH 䏿¼¸å‡ºç¾çš„那一-
蚗仵蛂C如果使用了 -a é¸é …, type åˆ—å°æ‰€æœ‰åŒ…å«å¯åŸ·è¡Œçš„å稱 name
çš„å ´åˆã€‚çµæžœåŒ…括別åå’Œå‡½æ•¸ï¼Œç•¶ä¸”åƒ…ç•¶æ²’æœ‰åŒæ™‚使用 -p é¸é …。使用
-a æ™‚ä¸æœƒæŸ¥æ‰¾æ•£åˆ—ä¸çš„命令表。é¸é … -f é˜»æ¢ shell
進行查找,就åƒåœ¨å…§å»ºå‘½ä»¤ command ä¸ä¸€æ¨£ã€‚ type
è¿”å›žçœŸï¼Œå¦‚æžœæ‰¾åˆ°äº†ä»»ä½•åƒæ•¸ã€‚什麼都沒找到則返回å‡ã€‚
ulimit [-SHacdflmnpstuv [limit]]
在支æŒå®ƒçš„ç³»çµ±ä¸Šï¼Œå° shell
和它啟動的進程,æä¾›å°å¯ç”¨è³‡æºçš„æŽ§åˆ¶ã€‚ é¸é … -H å’Œ -S
指定為所給資æºè¨å®šçš„硬性和柔性é¡ã€‚ 硬性é¡åœ¨è¨ç½®å¾Œä¸èƒ½å¢žåŠ ï¼›æŸ”æ€§-
é¡å¯ä»¥å¢žåŠ ï¼Œç›´åˆ°èˆ‡ç¡¬æ€§é¡ç›¸ç‰ã€‚ 如果沒有給出 -H 或 -S
é¸é …ï¼Œå°‡åŒæ™‚è¨ç½®ç¡¬æ€§å’ŒæŸ”性é¡ã€‚ limit 的i以是一-
èšïš¶rï¼Œå–®ä½æ˜¯æŒ‡å®šè³‡æºçš„單元A或者是特殊 hard, soft, 或 unlim-
ited ä¹‹ä¸€ï¼Œæ„æ€åˆ†åˆ¥æ˜¯ç•¶å‰ç¡¬æ€§é¡ï¼Œç•¶å‰æŸ”性é¡å’Œæ²’有é¡ã€‚如果忽略了
limit A 將列å°å‡ºç•¶å‰å°è³‡æºçš„æŸ”性é¡ïŸ«A除éžçµ¦å‡ºäº† -H
é¸é …。當指定多於一 è³‡æºæ™‚,é¡å稱和單ä½å°‡åœ¨-
妨e列å°å‡ºä¾†ã€‚å…¶ä»–é¸é …按照如下æ„義解釋:
-a å ±å‘Šæ‰€æœ‰ç•¶å‰é¡
-c core 檔案的最大
-d 進程數據段的最大
-f shell 創建的檔案的最大
-l 記憶體ä¸å¯ä»¥éŽ–å®šçš„æœ€å¤§
-m 常é§è¨˜æ†¶é«”的最大
-n 打開的檔案æzç¬¦æœ€å¤§èš (大多數系統ä¸å…許è¨ç½®é€™èš§)
-p 管é“大å°ï¼Œä»¥ 512 å—ç¯€çš„å¡Šç‚ºå–®ä½ (這蚧å¯èƒ½ä¸èƒ½è¨ç½®)
-s 棧的最大
-t cpu 時間總數的最大A以秒p
-u 使用者å¯ä»¥é‹è¡Œçš„æœ€å¤§é€²ç¨‹æ•¸
-v shell å¯ç”¨çš„虛擬記憶體總é‡çš„æœ€å¤§
如果給出了 limit A 它將是指定資æºçš„æ–°é¡ (é¸é … -a åªé¡¯ç¤ºå®ƒ-
)。如果沒有給出é¸é …,則å‡è¨æœ‰ - C ïŸ´ç„æ’®W間隔是 1024
å—節,除了 -t 單使˜¯ 秒, -p 單使˜¯ 512 å—節的塊èšïš±A -n å’Œ -u
是ä¸å¯èª¿ç¯€çš„C返回
0,除éžçµ¦å‡ºäº†éžæ³•çš„é¸é …æˆ–åƒæ•¸ï¼Œæˆ–者在è¨ç½®æ–°çš„顿™‚發生了錯誤。
umask [-p] [-S] [mode]
使用者創建檔案的掩碼被è¨ç½®ç‚º mode. 如果 mode
以數å—開始,它被解釋為一茪K進制數;å¦å‰‡è¢«è§£é‡‹ç‚ºé¡žä¼¼æ–¼ chmod(1)
接å—的符號形å¼çš„æ¨¡å¼æŽ©ç¢¼ã€‚如果忽略了 mode A 將列å°ç•¶å‰æŽ©ç¢¼-
Cé¸é … -S
使得掩碼以符號形å¼åˆ—å°ï¼›é è¨è¼¸å‡ºæ˜¯å…«é€²åˆ¶æ•¸ã€‚如果給出了 -p
é¸é …,並且忽略了 mode A 輸出將是一種å¯ä»¥å’±å³Žå€æ“—J的形å¼ã€‚返回O
0,如果æˆåŠŸæ”¹è®Šäº†æ¨¡å¼ï¼Œæˆ–者沒有給出 mode。 其他情æ³è¿”回å‡ã€‚
unalias [-a] [name ...]
從已定義的別å列表ä¸åˆªé™¤ name。如果給出了 -a
將刪除所有別å定義。返回O真,除éžçµ¦å‡ºçš„ name
䏿˜¯å·²å®šç¾©çš„別å。
unset [-fv] [name ...]
å°‡æ¯ name å°æ‡‰çš„è®Šé‡æˆ–函數刪除。如果沒有給出é¸é …,或者給出了 -v
é¸é …, name 僅包括 shell
變é‡ã€‚åªè®€çš„變é‡ä¸èƒ½è¢«å–消定義。如果給出了 -f é¸é …, name 僅包括
shell 函數,函數的定義將被刪除。æ¯-
茬Qå–æ¶ˆå®šç¾©çš„è®Šé‡æˆ–函數都被從後續命令的環境ä¸åˆªé™¤ã€‚ 如果 RANDOM,
SECONDS, LINENO, HISTCMD, FUNCNAME, GROUPS, 或者 DIRSTACK
ä¸çš„任何一茬Qå–æ¶ˆå®šç¾©ï¼Œå®ƒæˆ”N喪失特殊的屬性,å³ä½¿å®ƒæ€®å¶èŒ¬Q-
å¥s定義。 é€€å‡ºç‹€æ…‹æ˜¯çœŸï¼Œé™¤éž name ä¸å˜åœ¨æˆ–是åªè®€çš„。
wait [n]
ç‰å¾…指定的進程,返回它的終æ¢ç‹€æ…‹ã€‚ n å¯ä»¥æ˜¯é€²ç¨‹ ID 或一-
è@æ¥è™Ÿï¼›å¦‚果給出的是作æ¥è™Ÿï¼Œå°‡ç‰å¾…作æ¥çš„管é“䏿‰€æœ‰é€²ç¨‹ã€‚如果沒有給出
n A å°‡ç‰å¾…所有當å‰è™•於激活狀態的å進程,返回狀態是 0。如果 n
指定了ä¸å˜åœ¨çš„進程或作æ¥ï¼Œè¿”回狀態是
127。å¦å‰‡ï¼Œè¿”回狀態是所ç‰å¾…的最後一èˆi程或作æ¥çš„退出狀態。
如果 bash 以 rbash å稱啟動,或者啟動時使用了 -r é¸é …,那麼它æˆç‚ºå—çš„
shell。 å—çš„ shell ä¸€èˆ¬ç”¨ä¾†å»ºç«‹ä¸€èŒªé¬„éƒ±ï— shell å—到更多控制的環境。
它的行為與 bash 一P,除了下列行為是ä¸å…許的 (disallowed) æˆ–ä¸æœƒé‹è¡Œçš„
(not performed)。
o 使用 cd 來改變路徑;
o è¨ç½®æˆ–å–æ¶ˆ SHELL, PATH, ENV, 或 BASH_ENV 變é‡çš„F
o 指定的命令åä¸åŒ…å« / ï¼›
o æŒ‡å®šåŒ…å« / 的檔å作為傳éžçµ¦å…§å»ºå‘½ä»¤ . çš„åƒæ•¸ï¼›
o æŒ‡å®šåŒ…å«æ–œæ§“ (slash) 的檔å作為 -p é¸é …çš„åƒæ•¸ï¼Œå‚³éžçµ¦ hash
內建命令;
o 啟動時從 shell 環境ä¸å°Žå…¥ (import) 函數定義;
o 啟動時解釋 shell ç’°å¢ƒä¸ SHELLOPTS 的F
o 使用 >, >|, <>, >&, &>, å’Œ >> ç‰å’¿w呿“作符咿wå‘輸出;
o 使用 exec 內建命令來以å¦ä¸€èŒ¤Rä»¤æ›¿æ› shellï¼›
o 使用 enable 內建命令的 -f å’Œ -d é¸é …ä¾†å¢žåŠ å’Œåˆªé™¤å…§å»ºå‘½ä»¤ï¼›
o 使用 enable 內建命令來å…è¨±å’Œç¦æ¢ shell 內建命令;
o 指定 command 內建命令的 -p é¸é …ï¼›
o 使用 set +r 或 set +o restricted ä¾†é—œé–‰å—æ¨¡å¼ã€‚
這些制在所有啟動檔案讀å–ä¹‹å¾Œæ‰æœƒç”Ÿæ•ˆã€‚
當一 shell 稿本作為一茤R令執行時 (åƒè¦‹ä¸Šæ‚¸ (COMMAND EXECU-
TION) ç« ç¯€), rbash 關閉為執行稿本而åµåŒ– (spawn) çš„ shell 的所有制。
Bash Reference Manual, Brian Fox and Chet Ramey
The Gnu Readline Library, Brian Fox and Chet Ramey
The Gnu History Library, Brian Fox and Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell and Utili-
ties, IEEE
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)
(FILES)
/bin/bash
bash å¯åŸ·è¡Œæª”案
/etc/profile
系統Såœçš„åˆå§‹åŒ–檔案,登入 shell 會執行它
~/.bash_profile
茪Håˆå§‹åŒ–檔案,登入 shell 會執行它
~/.bashrc
茪Hçš„æ¯èŒˆç’Šæ³µ shell 啟動時執行的檔案
~/.bash_logout
茪H的登入 shell æ¸…ç†æª”案,當一茧nå…¥ shell 退出時會執行它
~/.inputrc
茪Hçš„ readline åˆå§‹åŒ–檔案
(AUTHORS)
Brian Fox, Free Software Foundation
bfox@gnu.org
Chet Ramey, Case Western Reserve University
chet@ins.CWRU.Edu
å¦‚æžœä½ ç™¼ç¾ä¸€ bash ä¸çš„ bugï¼Œä½ æ‡‰ç•¶å ±å‘Šå®ƒã€‚ä½†æ˜¯æ¼¸ï¼Œ
ä½ æ‡‰ç•¶ç¢ºå®šå®ƒçœŸçš„æ˜¯ä¸€ bugï¼Œä¸¦ä¸”å®ƒåœ¨ä½ ä½¿ç”¨çš„æœ€æ–°ç‰ˆæœ¬çš„ bash ä¸å˜åœ¨ã€‚
ä¸€æ—¦ä½ èªå®šå˜åœ¨é‚£æ¨£ä¸€ bug,使用 bashbug 命令來æäº¤ä¸€èš‡æ¬ž~å ±å‘Šã€‚
å¦‚æžœä½ æœ‰å›ºå®šä½å€ï¼Œé¼“å‹µä½ ç”¨éƒµæ”¿çš„æ–¹å¼æäº¤ä¸€ä»½ï¼ å»ºè°å’Œæœ‰é—œ bash 「齙ïŽv
(`philosophical') çš„ ã€ŒéŒ¯èª¤å ±å‘Šã€ å¯ä»¥å¯„給 bug-bash@gnu.org 或者貼到
Usenet æ–°èžçµ„ gnu.bash.bug 之上。
æ‰€æœ‰éŒ¯èª¤å ±å‘Šæ‡‰ç•¶åŒ…æ‹¬ï¼š
bash 的版本號
硬體信æ¯å’Œä½œæ¥ç³»çµ±
用來編è¯çš„ç·¨è¯å™¨
å° bug 行為的æz
å¯ä»¥æ¿€æ´»é€™ bug 的一茧uå°çš„稿本或者什麼 「秘訣〠(recipe)
bashbug 會自動在它æä¾›çš„éŒ¯èª¤å ±å‘Šæ¨¡æ¿ä¸æ’å…¥å‰ä¸‰é …。
關於這份手冊éšç†Šè«–å’ŒéŒ¯èª¤å ±å‘Šè«‹ç›´æŽ¥æäº¤åˆ° chet@ins.CWRU.Edu.
BUGS
它太大了,並且有點慢。
bash 和傳統版本的 sh ä¹‹é–“æœ‰ä¸€äº›ç´°å¾®çš„å·®åˆ¥ï¼Œå¤§éƒ¨åˆ†æ˜¯å› ç‚º POSIX è¦ç´„çš„-
n求。
åˆ¥åæ©Ÿåˆ¶åœ¨ä¸€äº›æ‡‰ç”¨ä¸æœƒæ··æ·†ã€‚
Shell 內建命令和函數ä¸å¯çµ‚æ¢/å¥s開始。
組åˆçš„命令和使用 `a ; b ; c'
å½¢å¼çš„命令åºåˆ—åœ¨é€²ç¨‹è©¦åœ–æš«åœæ™‚ä¸èƒ½å¾ˆå¥½è™•ç†ã€‚ 當一èˆiç¨‹ä¸æ¢ï¼Œshell
會立å³åŸ·è¡Œåºåˆ—ä¸çš„下一æ¢å‘½ä»¤ã€‚
也å¯ä»¥å°‡å‘½ä»¤çš„åºåˆ—放在圓括號ä¸ï¼Œä¾†å¼·åˆ¶å•Ÿå‹•å shell,這樣就å¯ä»¥å°‡å®ƒ-
怬@為一茬璊舅ä¸è¬…F。
在 $(...) 命令替æ›ä¸çš„æ³¨é‡‹ä¸æœƒè¢«è§£é‡‹ï¼Œç›´åˆ°åŸ·è¡Œæ›¿æ›çš„æ™‚唌C
這將延é²å ±éŒ¯ï¼Œç›´åˆ°å‘½ä»¤é–‹å§‹åŸ·è¡Œä¹‹å¾Œçš„一段時間。
數組變é‡é‚„ä¸èƒ½å°Žå‡º (export)。
H]
v <bbbush@163.com>
s]
2004.03.05
linu ma n:
http://cmpp.linuxforum.net