Provided by:
manpages-zh_1.5-1_all 
NAME
bash - GNU Bourne-Again SHell (GNU å‘½ä»¤è§£é‡Šç¨‹åº â€œBourne二世â€)
(SYNOPSIS)
bash [options] [file]
(COPYRIGHT)
Bash is Copyright (C) 1989-2002 by the Free Software Foundation, Inc.
(DESCRIPTION)
Bash 是一个与 sh
兼容的命令解释程åºï¼Œå¯ä»¥æ‰§è¡Œä»Žæ ‡å‡†è¾“入或者文件ä¸è¯»å–的命令。 Bash
也整åˆäº† Korn å’Œ C Shell (ksh å’Œ csh) ä¸çš„优秀特性。
Bash çš„ç›®æ ‡æ˜¯æˆä¸ºéµ IEEE POSIX Shell and Tools specification (IEEE
Working Group 1003.2,å¯ç§»æ¤æ“作系统规约: shell 和工具) 的实现。
(OPTIONS)
除了在 set 内建命令的文档ä¸è®²è¿°çš„å•å—符选项 (option) 之外,bash
在å¯åŠ¨æ—¶è¿˜è§£é‡Šä¸‹åˆ—é€‰é¡¹ã€‚
-c string 如果有 -c 选项,那么命令将从 string ä¸è¯»å–。如果 string
åŽé¢æœ‰å‚æ•° (argument),它们将用于给ä½ç½®å‚æ•° (positional
parameter,以 $0 起始) 赋值。
-i 如果有 -i 选项,shell 将交互地执行 ( interactive )。
-l 选项使得 bash 以类似登录 shell (login shell) 的方å¼å¯åЍ
(å‚è§ä¸‹é¢çš„ (INVOCATION) ç« èŠ‚)。
-r 如果有 -r 选项,shell æˆä¸ºå—é™çš„ ( restricted ) (å‚è§ä¸‹é¢çš„
shell(RESTRICTED SHELL) ç« èŠ‚)。
-s 如果有 -s
选项,或者如果选项处ç†å®Œä»¥åŽï¼Œæ²¡æœ‰å‚æ•°å‰©ä½™ï¼Œé‚£ä¹ˆå‘½ä»¤å°†ä»Žæ ‡å‡†è¾“å…¥è¯»å–。
这个选项å…许在å¯åŠ¨ä¸€ä¸ªäº¤äº’ shell æ—¶å¯ä»¥è®¾ç½®ä½ç½®å‚数。
-D 呿 ‡å‡†è¾“出打å°ä¸€ä¸ªä»¥ $ 为å‰å¯¼çš„,以åŒå¼•å·å¼•用的å—符串列表。
这是在当å‰è¯è¨€çŽ¯å¢ƒä¸æ˜¯ C 或 POSIX 时,脚本ä¸éœ€è¦èŠ¬æ°²æ·–å€
这个选项éšå«äº† -n 选项;ä¸ä¼šæ‰§è¡Œå‘½ä»¤ã€‚
[-+]O [shopt_option]
shopt_option 是一个 shopt å†…å»ºå‘½ä»¤å¯æŽ¥å—的选项 (å‚è§ä¸‹é¢çš„
shell (SHELL BUILTIN COMMANDS) ç« èŠ‚)。 如果有
shopt_option,-O 将设置那个选项的å–值; +O å–æ¶ˆå®ƒã€‚
如果没有给出 shopt_option,shopt
å°†åœ¨æ ‡å‡†è¾“å‡ºä¸Šæ‰“å°è®¾ä¸ºå…许的选项的å称和值。 如果å¯åŠ¨é€‰é¡¹æ˜¯
+O,输出将以一ç§å¯ä»¥é‡ç”¨ä¸ºè¾“å…¥çš„æ ¼å¼æ˜¾ç¤ºã€‚
-- -- æ ‡å¿—é€‰é¡¹çš„ç»“æŸï¼Œç¦æ¢å…¶ä½™çš„选项处ç†ã€‚任何 --
之åŽçš„傿•°å°†ä½œä¸ºæ–‡ä»¶åå’Œå‚æ•°å¯¹å¾…ã€‚å‚æ•° - 与æ¤ç‰ä»·ã€‚
Bash
也解释一些多å—节的选项。在命令行ä¸ï¼Œè¿™äº›é€‰é¡¹å¿…须置于需è¦è¢«è¯†åˆ«çš„å•å—ç¬¦å‚æ•°ä¹‹å‰ã€‚
--dump-po-strings
ç‰ä»·äºŽ -D,但是输出是 GNU gettext po (å¯ç§»æ¤å¯¹è±¡) æ–‡ä»¶æ ¼å¼
--dump-strings
ç‰ä»·äºŽ -D
--help åœ¨æ ‡å‡†è¾“å‡ºæ˜¾ç¤ºç”¨æ³•ä¿¡æ¯å¹¶æˆåŠŸé€€å‡º
--init-file file
--rcfile file
如果 shell 是交互的,执行 file
ä¸çš„å‘½ä»¤ï¼Œè€Œä¸æ˜¯æ ‡å‡†çš„个人åˆå§‹åŒ–文件 ~/.bashrc (å‚è§ä¸‹é¢çš„
(INVOCATION) ç« èŠ‚)
--login
ç‰ä»·äºŽ -l
--noediting
如果 shell 是交互的,ä¸ä½¿ç”¨ GNU readline 库æ¥è¯»å‘½ä»¤è¡Œ
--noprofile
ä¸è¯»å–系统范围的å¯åŠ¨æ–‡ä»¶ /etc/profile 或者任何个人åˆå§‹åŒ–文件
~/.bash_profile, ~/.bash_login, 或 ~/.profile 。默认情况下,
bash 在作为登录 shell å¯åŠ¨æ—¶è¯»å–这些文件 (å‚è§ä¸‹é¢çš„ (INVO-
CATION) ç« èŠ‚)
--norc 如果 shell 是交互的,ä¸è¯»å–/执行个人åˆå§‹åŒ–文件 ~/.bashrc
这个选项在 shell 以 sh 命令å¯åŠ¨æ—¶æ˜¯é»˜è®¤å¯ç”¨çš„
--posix
如果默认æ“作与 POSIX 1003.2 æ ‡å‡†ä¸åŒçš„è¯ï¼Œæ”¹å˜ bash
的行为æ¥ç¬¦åˆæ ‡å‡† (posix mode)
--restricted
shell æˆä¸ºå—é™çš„ (å‚è§ä¸‹é¢çš„ shell(RESTRICTED SHELL) ç« èŠ‚)
--rpm-requires
产生一个为使脚本è¿è¡Œï¼Œéœ€è¦çš„æ–‡ä»¶çš„列表。 这个选项包å«äº† -n
选项。 它是为了é¿å…进行编译期错误检测时的é™åˆ¶ï¼ƒ Backticks, []
tests, 还有 evals ä¸ä¼šè¢«è§£é‡Šï¼Œä¸€äº›ä¾èµ–关系å¯èƒ½ä¸¢å¤±
--verbose
ç‰ä»·äºŽ -v
--version
åœ¨æ ‡å‡†è¾“å‡ºæ˜¾ç¤ºæ¤ bash 的版本信æ¯å¹¶æˆåŠŸé€€å‡ºã€‚
(ARGUMENTS)
如果选项处ç†ä¹‹åŽä»æœ‰å‚数剩余,并且没有指定 -c 或 -s
é€‰é¡¹ï¼Œç¬¬ä¸€ä¸ªå‚æ•°å°†å‡å®šä¸ºä¸€ä¸ªåŒ…å« shell 命令的文件的åå—。 如果 bash
æ˜¯ä»¥è¿™ç§æ–¹å¼å¯åŠ¨çš„ï¼Œ $0
将设置为这个文件的åå—,ä½ç½®å‚æ•°å°†è®¾ç½®ä¸ºå‰©ä½™çš„å…¶ä»–å‚æ•°ã€‚ Bash
从这个文件ä¸è¯»å–并执行命令,然åŽé€€å‡ºã€‚ Bash
çš„é€€å‡ºçŠ¶æ€æ˜¯è„šæœ¬ä¸æ‰§è¡Œçš„æœ€åŽä¸€ä¸ªå‘½ä»¤çš„退出状æ€ã€‚
å¦‚æžœæ²¡æœ‰æ‰§è¡Œå‘½ä»¤ï¼Œé€€å‡ºçŠ¶æ€æ˜¯0。
å°è¯•çš„æ¥éª¤æ˜¯å…ˆè¯•图打开在当å‰ç›®å½•ä¸çš„这个文件,接下æ¥ï¼Œ
如果没有找到,shell å°†æœç´¢è„šæœ¬çš„ PATH 环境å˜é‡ä¸çš„路径。
(INVOCATION)
login shell 登录 shellï¼Œå‚æ•°é›¶çš„第一个å—符是 - ,或者å¯åŠ¨æ—¶æŒ‡å®šäº†
--login 选项的 shell。
interactive 交互的
shell,是一个å¯åŠ¨æ—¶æ²¡æœ‰æŒ‡å®šéžé€‰é¡¹çš„傿•°ï¼Œå¹¶ä¸”没有指定 -c
é€‰é¡¹ï¼Œæ ‡å‡†è¾“å‡ºå’Œæ ‡å‡†è¾“å…¥éƒ½è¿žæŽ¥åˆ°äº†ç»ˆç«¯ (在 isatty(3) ä¸åˆ¤å®š)
çš„shell,或者å¯åŠ¨æ—¶æŒ‡å®šäº† -i 选项的 shell。如果 bash 是交互的, PS1
环境å˜é‡å°†è¢«è®¾ç½®ï¼Œå¹¶ä¸” $- åŒ…å« i ,å…许一个 shell
脚本或者一个å¯åŠ¨æ–‡ä»¶æ¥æ£€æµ‹è¿™ä¸€çжæ€ã€‚
ä¸‹åˆ—æ®µè½æè¿°äº† bash
如何执行它的å¯åŠ¨æ–‡ä»¶ã€‚å¦‚æžœè¿™äº›å¯åŠ¨æ–‡ä»¶ä¸çš„任一个å˜åœ¨ä½†æ˜¯ä¸å¯è¯»å–, bash
将报告一个错误。文件åä¸çš„æ³¢æµªå· (~,tilde) å°†åƒ EXPANSION ç« èŠ‚ä¸ Tilde
Expansion 段æè¿°çš„é‚£æ ·å±•å¼€ã€‚
当 bash 是作为交互的登录 shell å¯åŠ¨çš„ï¼Œæˆ–è€…æ˜¯ä¸€ä¸ªéžäº¤äº’çš„ shell
但是指定了 --login 选项, 它首先读å–并执行 /etc/profile
ä¸çš„命令,åªè¦é‚£ä¸ªæ–‡ä»¶å˜åœ¨ã€‚ 读å–那个文件之åŽï¼Œå®ƒä»¥å¦‚ä¸‹çš„é¡ºåºæŸ¥æ‰¾
~/.bash_profile, ~/.bash_login, 和 ~/.profile,
从å˜åœ¨å¹¶ä¸”å¯è¯»çš„第一个文件ä¸è¯»å–并执行其ä¸çš„命令。 --noprofile
选项å¯ä»¥ç”¨æ¥åœ¨ shell å¯åŠ¨æ—¶é˜»æ¢å®ƒè¿™æ ·åšã€‚
当一个登录 shell 退出时, bash 读å–并执行文件 ~/.bash_logout
ä¸çš„命令,åªè¦å®ƒå˜åœ¨ã€‚
当一个交互的 shell 但䏿˜¯ç™»å½• shell å¯åŠ¨æ—¶ï¼Œ bash 从文件 ~/.bashrc
ä¸è¯»å–并执行命令,åªè¦å®ƒå˜åœ¨ã€‚å¯ä»¥ç”¨ --norc 选项æ¥é˜»æ¢å®ƒè¿™æ ·åšã€‚
--rcfile file 选项将强制 bash 读å–并执行文件 file ä¸çš„å‘½ä»¤ï¼Œè€Œä¸æ˜¯
~/.bashrc ä¸çš„。
当 bash 以éžäº¤äº’的方å¼å¯åŠ¨æ—¶ï¼Œä¾‹å¦‚åœ¨è¿è¡Œä¸€ä¸ª shell
è„šæœ¬æ—¶ï¼Œå®ƒåœ¨çŽ¯å¢ƒä¸æŸ¥æ‰¾å˜é‡ BASH_ENV
,如果它å˜åœ¨åˆ™å°†å®ƒçš„值展开,使用展开的值作为一个文件的å称,读å–并执行。
Bash è¿ä½œçš„è¿‡ç¨‹å°±å¦‚åŒæ‰§è¡Œäº†ä¸‹åˆ—命令:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
但是没有使用 PATH å˜é‡çš„å€¼æ¥æœç´¢é‚£ä¸ªæ–‡ä»¶å。
如果 bash 以åç§° sh å¯åŠ¨ï¼Œå®ƒè¯•å›¾æ¨¡ä»¿ (mimic) sh
历å²ç‰ˆæœ¬çš„å¯åŠ¨è¿‡ç¨‹ï¼Œå°½å¯èƒ½åœ°ç›¸ä¼¼ï¼ŒåŒæ—¶ä¹Ÿéµ POSIX æ ‡å‡†ã€‚
当作为交互å¼ç™»å½• shell å¯åŠ¨æ—¶,或者是éžäº¤äº’但使用了 --login 选项
å¯åŠ¨çš„æ—¶å€™,它首先å°è¯•读å–并执行文件 /etc/profile å’Œ ~/.profile,
ä¸çš„命令. 选项 --noprofile 用于é¿å…è¿™ç§è¡Œä¸º.当使用命令 sh
æ¥å¯åŠ¨ä¸€ä¸ªäº¤äº’å¼çš„ shell æ—¶, bash 查找环境å˜é‡ ENV,
如果有定义的è¯å°±æ‰©å±•它的值,ç„¶åŽä½¿ç”¨æ‰©å±•åŽçš„值作为è¦è¯»å–和执行的文件
çš„åç§°.由于使用 sh å¯åŠ¨çš„ shell ä¸ä¼šè¯»å–和执行任何其他的å¯åŠ¨æ–‡ä»¶,选项
--rcfile 没有æ„义.使用åç§° sh å¯åŠ¨çš„éžäº¤äº’çš„ shell
ä¸ä¼šè¯»å–任何其他å¯åŠ¨æ–‡ä»¶.当以 sh å¯åŠ¨æ—¶, bash 在读å–å¯åŠ¨æ–‡ä»¶ä¹‹åŽè¿›å…¥
posix 模å¼.
当 bash 以 posix 模å¼å¯åŠ¨æ—¶,(和使用 --posix å‘½ä»¤è¡Œå‚æ•°æ•ˆæžœç›¸åŒ),它éµ
POSIX æ ‡å‡†. è¿™ç§æ¨¡å¼ä¸‹,äº¤äº’å¼ shell 扩展 ENV
环境å˜é‡çš„值,读å–并执行以扩展åŽå€¼ä¸ºæ–‡ä»¶åçš„é…置文件. ä¸ä¼šè¯»å–其他文件.
Bash è¯•ç€æ£€æµ‹å®ƒæ˜¯ä¸æ˜¯ç”±è¿œç¨‹ shell 守护程åº,通常为 rshd å¯åŠ¨çš„.如果 bash
å‘现它是由 rshd å¯åŠ¨çš„,它将读å–并执行 ~/.bashrc 文件ä¸çš„命令,
åªè¦è¿™ä¸ªæ–‡ä»¶å˜åœ¨å¹¶ä¸”å¯è¯».如果以 sh 命令å¯åЍ,它ä¸ä¼šè¿™æ ·åš. 选项 --norc
å¯ä»¥ç”¨æ¥é˜»æ¢è¿™ç§è¡Œä¸º,选项 --rcfile 用æ¥å¼ºåˆ¶è¯»å–å¦ä¸€ä¸ªæ–‡ä»¶,但是通常 rshd
ä¸ä¼šå…许它们, 或者用它们æ¥å¯åЍ shell.
如果 shell 是以与真实用户(组) id ä¸åŒçš„æœ‰æ•ˆç”¨æˆ·(组) id æ¥å¯åŠ¨çš„,
并且没有 - 选项,那么它ä¸ä¼šè¯»å–å¯åŠ¨æ–‡ä»¶, 也ä¸ä¼šä»ŽçŽ¯å¢ƒä¸ç»§æ‰¿ shell 函数.
环境å˜é‡ä¸å¦‚果出现 SHELLOPT,它将被忽略.有效用户 id 将设置为真实用户
id. 如果å¯åŠ¨æ—¶ç»™å‡ºäº† -
选项,那么å¯åŠ¨æ—¶çš„è¡Œä¸ºæ˜¯ç±»ä¼¼çš„, 但是ä¸ä¼šé‡ç½®æœ‰æ•ˆç”¨æˆ· id.
(DEFINITIONS)
下列定义在文档余下部分ä¸é€šç”¨.
blank 白
ä¸€ä¸ªç©ºæ ¼æˆ–æ˜¯ tab .
wordè¯
一个å—符åºåˆ—, shell 将它们视为一个结构å•å…ƒ. 也称为一个
token片段。
name
一个åªç”±å—æ¯,æ•°å—和下划线构æˆçš„è¯,并且以å—符或下划线起始.
也称为一个 word identifieræ ‡è¯†ç¬¦.
metacharacter
一个å—符, å¦‚æžœä¸æ˜¯å¼•用的è¯, å°†æˆä¸ºè¯çš„分隔符. 它是如下å—符之一:
| & ; ( ) < > space tab
control operator 符
一个 token(æ ‡è¯†), 拥有控制功能. 它是如下符å·ä¹‹ä¸€:
|| & && ; ;; ( ) | <newline>
Reserved words(ä¿ç•™å—) 是对 shell 有特殊æ„义的è¯.
下列è¯è¢«è¯†åˆ«ä¸ºä¿ç•™çš„, å¦‚æžœä¸æ˜¯å¼•用, 并䏔䏿˜¯ä¸€ä¸ªç®€å•命令的起始è¯
(å‚è§ä¸‹é¢çš„ shel ("SHELL GRAMMAR") ), ä¹Ÿä¸æ˜¯ case 或者 for
命令的第三个è¯:
! case do done elif else esac fi for function if in select then until
while { } time [[ ]]
Simple Commands
simple command(简å•命令) 是(å¯é€‰çš„)一系列å˜é‡èµ‹å€¼, ç´§æŽ¥ç€æ˜¯ blank(ç©ºæ ¼)
分隔的è¯å’Œé‡å®šå‘, ç„¶åŽä»¥ä¸€ä¸ª control operator 结æŸ.
ç¬¬ä¸€ä¸ªè¯æŒ‡æ˜Žäº†è¦æ‰§è¡Œçš„命令, 它被作为第 0 ä¸ªå‚æ•°.
å…¶ä½™è¯è¢«ä½œä¸ºè¿™ä¸ªå‘½ä»¤çš„傿•°.
simple command 简å•命令的返回值是它的退出状æ€, 或是 128+n, 如果命令被
signal(ä¿¡å·) n 结æŸçš„è¯.
Pipelines é“
pipeline(管é“) 是一个或多个命令的åºåˆ—,用å—符 | 分隔。管é“çš„æ ¼å¼æ˜¯è¿™æ ·:
[time [-p]] [ ! ] command [ | command2 ... ]
命令 command çš„æ ‡å‡†è¾“å‡ºé€šè¿‡ç®¡é“连接到命令 command2
çš„æ ‡å‡†è¾“å…¥ã€‚è¿žæŽ¥æ˜¯åœ¨å‘½ä»¤æŒ‡å®šçš„ä»»ä½•é‡å®šå‘之å‰è¿›è¡Œçš„(å‚è§ä¸‹é¢çš„ REDIREC-
TION
如果ä¿ç•™å— !
作为管é“å‰ç¼€ï¼Œç®¡é“的退出状æ€å°†æ˜¯æœ€åŽä¸€ä¸ªå‘½ä»¤çš„退出状æ€çš„逻挤侵æ€
å¦åˆ™ï¼Œç®¡é“的退出状æ€å°±æ˜¯æœ€åŽä¸€ä¸ªå‘½ä»¤çš„。 shell
在返回退出状æ€å€¼ä¹‹å‰ï¼Œç‰å¾…管é“ä¸çš„æ‰€æœ‰å‘½ä»¤è¿”回。
如果ä¿ç•™å— time
作为管é“å‰ç¼€ï¼Œç®¡é“䏿¢åŽå°†ç»™å‡ºæ‰§è¡Œç®¡é“耗费的用户和系统时间。 选项 -p
å°†ä½¿è¾“å‡ºç¬¦åˆ POSIX æŒ‡å®šçš„æ ¼å¼ã€‚ 环境å˜é‡ TIMEFORMAT
å¯ä»¥è®¾ç½®ä¸ºä¸€ä¸ªæ ¼å¼å—符串,指定时间信æ¯åº”当如何显示;å‚è§ä¸‹é¢çš„ Shell
Variables é‡ä¸ TIMEFORMAT 的讲述。
管é“ä¸çš„æ¯ä¸ªå‘½ä»¤éƒ½ä½œä¸ºå•ç‹¬çš„è¿›ç¨‹æ¥æ‰§è¡Œ(å³ï¼Œåœ¨ä¸€ä¸ªå shell ä¸å¯åЍ)。
Lists 列
list(åºåˆ—)是一个或多个管é“,用æ“作符 ;, &, &&, 或 || 分隔的åºåˆ—,
并且å¯ä»¥é€‰æ‹©ç”¨ ;, &, 或 <newline>新行符结æŸ.
这些åºåˆ—æ“作符ä¸ï¼Œ && å’Œ || 优先级相åŒï¼Œå…¶æ¬¡æ˜¯ ; å’Œ &,
它们的优先级是相åŒçš„。
åºåˆ—ä¸å¯ä»¥æœ‰ä¸€ä¸ªæˆ–多个新行符æ¥åˆ†éš”å‘½ä»¤ï¼Œè€Œä¸æ˜¯ä½¿ç”¨åˆ†å·åˆ†éš”。
如果一个命令是由控制æ“作符 & 结æŸçš„, shell 将在åŽå°çš„å shell
䏿‰§è¡Œè¿™ä¸ªå‘½ä»¤ã€‚ shell ä¸ä¼šç‰å¾…命令执行结æŸï¼Œè¿”å›žçŠ¶æ€æ€»æ˜¯ 0ã€‚ä»¥åˆ†å· ;
åˆ†éš”çš„å‘½ä»¤ä¼šè¢«é¡ºåºæ‰§è¡Œï¼›shell
会ç‰å¾…æ¯ä¸ªå‘½ä»¤ä¾æ¬¡ç»“æŸã€‚è¿”å›žçŠ¶æ€æ˜¯æœ€åŽæ‰§è¡Œçš„命令的返回状æ€ã€‚
控制æ“作符 && å’Œ || 分别代表 AND å’Œ OR åºåˆ—。一个 AND åºåˆ—çš„å½¢å¼æ˜¯
command1 && command2
command2 åªæœ‰åœ¨ command1 返回 0 æ—¶æ‰è¢«æ‰§è¡Œã€‚
一个 OR åºåˆ—çš„å½¢å¼æ˜¯
command1 || command2
command2 åªæœ‰åœ¨ command1 è¿”å›žéž 0 çŠ¶æ€æ—¶æ‰è¢«æ‰§è¡Œã€‚AND å’Œ OR
åºåˆ—çš„è¿”å›žçŠ¶æ€æ˜¯åºåˆ—䏿œ€åŽæ‰§è¡Œçš„命令的返回状æ€ã€‚
Compound Commands
compound command(å¤åˆå‘½ä»¤) 是如下情况之一:
(list) list åºåˆ—将在一个å shell 䏿‰§è¡Œã€‚å˜é‡èµ‹å€¼å’Œå½±å“ shell
环境å˜é‡çš„内建命令在命令结æŸåŽä¸ä¼šå†èµ·ä½œç”¨ã€‚
返回值是åºåˆ—的返回值。
{ list; }
list åºåˆ—å°†åœ¨å½“å‰ shell
çŽ¯å¢ƒä¸æ‰§è¡Œã€‚åºåˆ—必须以一个新行符或分å·ç»“æŸã€‚ è¿™ç§åšæ³•ä¹Ÿç§°ä¸º
group command(命令组)。返回值是åºåˆ—的返回值。注æ„与元å—符 ( å’Œ
ä¸åŒï¼Œ { å’Œ } 是 reserved
words(ä¿ç•™å—),必须出现在能够识别ä¿ç•™å—的场åˆã€‚
由于它们ä¸ä¼šäº§ç”Ÿæ–è¯(cause a word
break),它们和åºåˆ—ä¹‹é—´å¿…é¡»ç”¨ç©ºæ ¼åˆ†å¼€ã€‚
((expression))
è¡¨è¾¾å¼ expression 将被求值。求值规则在下é¢çš„ 值(ARITH-
METIC EVALUATION) ç« èŠ‚ä¸æè¿°ã€‚å¦‚æžœè¡¨è¾¾å¼çš„值éžé›¶ï¼Œè¿”回值就是
0ï¼›å¦åˆ™è¿”回值是 1。这ç§åšæ³•å’Œ let "expression" ç‰ä»·ã€‚
[[ expression ]]
返回 0 或 1,å–决于æ¡ä»¶è¡¨è¾¾å¼ expression 求值的情况。
è¡¨è¾¾å¼æ˜¯ç”±ä¸‹é¢ CONDITIONAL EXPRESSIONS ç« èŠ‚ä¸æè¿°çš„-
è¯(primaries) 组æˆã€‚ [[ å’Œ ]]
ä¸çš„è¯ä¸ä¼šè¿›è¡Œè¯çš„æ‹†åˆ†å’Œè·¯å¾„的扩展处ç†ï¼› 而tilde
æ‰©å±•ï¼Œå‚æ•°å’Œå˜é‡æ‰©å±•,算术扩展,命令替æ¢ï¼Œå‡½æ•°æ›¿æ¢å’Œå¼•用的去除则都将进行。
当使用 == 和 !=
æ“作符时,æ“作符å³è¾¹çš„å—符串被认为是一个模å¼ï¼Œæ ¹æ®ä¸‹é¢ Pattern
Matching(模å¼åŒ¹é…) ç« èŠ‚ä¸çš„规则进行匹é…。 如果匹é…则返回值是
0,å¦åˆ™è¿”回
1。模å¼çš„任何部分å¯ä»¥è¢«å¼•用,强制使它作为一个å—符串而被匹é…。
表达å¼å¯ä»¥ç”¨ä¸‹åˆ—æ“作符结åˆèµ·æ¥ã€‚æ ¹æ®ä¼˜å…ˆçº§çš„é™åºåˆ—出如下:
( expression )
è¿”å›žè¡¨è¾¾å¼ expression
的值。括å·å¯ä»¥ç”¨æ¥æå‡æ“作符的优先级。
! expression
è¿”å›žçœŸï¼Œå¦‚æžœè¡¨è¾¾å¼ expression 返回å‡ã€‚
expression1 && expression2
è¿”å›žçœŸï¼Œå¦‚æžœè¡¨è¾¾å¼ expression1 å’Œ expression2 都返回真。
expression1 || expression2
è¿”å›žçœŸï¼Œå¦‚æžœè¡¨è¾¾å¼ expression1 或者 expression2
二者之一返回真。
&&(与) å’Œ || æ“作符ä¸ä¼šå¯¹è¡¨è¾¾å¼ expression2 求值,如果 expres-
sion1 å¯ä»¥å†³å®šæ•´ä¸ªæ¡ä»¶è¡¨è¾¾å¼çš„返回值的è¯ã€‚
for name [ in word ] ; do list ; done
in 之åŽçš„一系列è¯ä¼šè¢«æ‰©å±•,产生一个项目列表。å˜é‡ name
è¢«ä¾æ¬¡èµ‹ä»¥è¿™ä¸ªåˆ—表ä¸çš„æ¯ä¸ªå…ƒç´ ï¼Œ åºåˆ— list æ¯æ¬¡éƒ½è¢«æ‰§è¡Œã€‚如果 in
word 被忽略,那么 for 命令é历 已设置的ä½ç½®å‚æ•°(positional
parameter,å‚è§ä¸‹é¢çš„ PARAMETERS 为æ¯ä¸€ä¸ªæ‰§è¡Œä¸€æ¬¡åºåˆ—
list。 返回值是最åŽä¸€ä¸ªå‘½ä»¤çš„返回值。如果 in
之åŽçš„è¯æ‰©å±•的结果是空列表,就ä¸ä¼šæ‰§è¡Œä»»ä½•命令,返回值是 0。
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
é¦–å…ˆï¼Œç®—æœ¯è¡¨è¾¾å¼ expr1 è¢«æ ¹æ®ä¸‹é¢ 值 (ARITHMETIC EVALUA-
TION“ ä¸çš„规则进行求值。 ç„¶åŽç®—æœ¯è¡¨è¾¾å¼ expr2 被-
环求值,直到它ç‰äºŽ 0ã€‚æ¯æ¬¡ expr2 结果éžé›¶æ—¶ï¼Œåºåˆ— list
都被执行, ç®—æœ¯è¡¨è¾¾å¼ expr3
被求值。如果任何表达å¼è¢«å¿½ç•¥ï¼Œå°†è¢«è§†ä¸ºæ‰§è¡Œç»“果是 1。
返回值是åºåˆ— list ä¸è¢«æ‰§è¡Œçš„æœ€åŽä¸€ä¸ªå‘½ä»¤çš„返回值;或者是
false,如果任何表达å¼éžæ³•çš„è¯ã€‚
select name [ in word ] ; do list ; done
in
之åŽçš„一系列è¯ä¼šè¢«æ‰©å±•,产生一个项目列表。这个扩展åŽçš„è¯é›†åˆè¢«è¾“å‡ºåˆ°æ ‡å‡†é”™è¯¯ä¸Šï¼Œæ¯ä¸ªå‰é¢
åŠ ä¸Šä¸€ä¸ªæ•°å—。如果 in word 被忽略,将输出ä½ç½®å‚æ•° (å‚è§ä¸‹é¢çš„
PARAMETERS æ•° ç« èŠ‚)。 PS3
æç¤ºç¬¦å°†è¢«æ˜¾ç¤ºå‡ºæ¥ï¼Œç‰å¾…ä»Žæ ‡å‡†è¾“å…¥å¾—åˆ°ä¸€è¡Œè¾“å…¥ã€‚å¦‚æžœ
输入是一个数å—ä¸”æ˜¾ç¤ºä¸æœ‰å¯¹åº”çš„è¯ï¼Œé‚£ä¹ˆå˜é‡ name
的值将设置为这个è¯ã€‚如果输入一个空行,那么è¯å’Œæç¤ºç¬¦å°†å†æ¬¡æ˜¾ç¤ºå‡ºæ¥ã€‚如果读入了一个
EOF,命令就结æŸã€‚ 任何其他值将设置å˜é‡ name
为空。读入的行ä¿å˜ä¸ºå˜é‡ REPLY. åºåˆ— list
åœ¨æ¯æ¬¡é€‰æ‹©ä¹‹åŽéƒ½ä¼šæ‰§è¡Œï¼Œç›´åˆ°æ‰§è¡Œäº†ä¸€ä¸ª break 命令。 select
çš„é€€å‡ºçŠ¶æ€æ˜¯åºåˆ— list
䏿‰§è¡Œçš„æœ€åŽä¸€ä¸ªå‘½ä»¤çš„退出状æ€ï¼Œå¦‚果没有执行命令就是 0。
case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
case 命令首先扩展 word, ç„¶åŽä¾æ¬¡è¯•ç€ç”¨æ¯ä¸ª pattern æ¥åŒ¹é…它,
使用与路径扩展相åŒçš„匹é…规则(å‚è§ä¸‹é¢çš„ Pathname Expansion
展
ç« èŠ‚)。如果找到一个匹é…,相应的åºåˆ—将被执行。找到一个匹é…之åŽï¼Œä¸ä¼šå†å°è¯•å…¶åŽçš„匹é…。
如果没有模å¼å¯ä»¥åŒ¹é…,返回值是
0。å¦åˆ™ï¼Œè¿”回åºåˆ—䏿œ€åŽæ‰§è¡Œçš„命令的返回值。
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,直到åºåˆ—䏿œ€åŽä¸€ä¸ªå‘½ä»¤è¿”回 0。
until 命令和 while 命令ç‰ä»·ï¼Œé™¤äº†å¯¹æ¡ä»¶çš„æµ‹è¯•æ°å¥½ç›¸åï¼›åºåˆ— do
list 执行直到åºåˆ—䏿œ€åŽä¸€ä¸ªå‘½ä»¤è¿”回éžé›¶çжæ€å€¼ã€‚ while å’Œ until
å‘½ä»¤çš„é€€å‡ºçŠ¶æ€æ˜¯åºåˆ— do list 䏿œ€åŽä¸€ä¸ªå‘½ä»¤çš„退出状æ€ï¼Œ 或者是
0,如果没有执行任何命令。
[ function ] name () { list; }
è¿™æ ·å¯ä»¥å®šä¹‰ä¸€ä¸ªå为 name 的函数。函数体 body 是包å«åœ¨ { å’Œ }
之间的命令åºåˆ— list。 在指定将 name
作为一个命令è¿è¡Œçš„场åˆï¼Œè¿™ä¸ªåºåˆ—将被执行。
å‡½æ•°çš„é€€å‡ºçŠ¶æ€æ˜¯å‡½æ•°ä½“æœ€åŽæ‰§è¡Œçš„命令的退出状æ€(å‚è§ä¸‹é¢çš„ FUNC-
TIONS ç« èŠ‚)。
(COMMENTS)
在éžäº¤äº’çš„ shell 䏿ˆ–者使用内建命令 shopt å¯ç”¨äº† interactive_comments
选项的交互的 shell ä¸ï¼Œä»¥ #
èµ·å§‹çš„è¯ä½¿å¾—这个è¯å’Œæ‰€æœ‰åŒä¸€è¡Œä¸Šæ‰€æœ‰å‰©ä½™çš„å—符都被忽略。没有å¯ç”¨ inter-
active_comments é€‰é¡¹çš„äº¤äº’å¼ shell ä¸å…许出现注释。这个选项在交互å¼
shell 䏿˜¯é»˜è®¤å¯ç”¨çš„ (å‚è§ä¸‹é¢çš„ shell (SHELL BUILTIN COMMANDS)
ç« èŠ‚)。
(QUOTING)
引用 Quoting
用æ¥åŽ»æŽ‰ç‰¹å®šå—符或è¯çš„特殊æ„义。引用å¯ä»¥ç”¨æ¥ç¦æ¢å¯¹ç‰¹æ®Šå—符的处ç†ï¼Œ
阻æ¢ä¿ç•™å—被识别,还用æ¥é˜»æ¢å‚数的扩展。
上é¢åœ¨ DEFINITIONS 义ä¸åˆ—出的æ¯ä¸ªå…ƒå—符 metacharacters 对于 shell
都有特殊æ„义。如果è¦è¡¨è¾¾å®ƒçš„æœ¬ä¹‰ï¼Œå¿…须引用它。
åœ¨ä½¿ç”¨å‘½ä»¤è¡ŒåŽ†å²æ‰©å±•功能时,history expansion å—符,通常是
!,必须被引用,æ‰ä¸ä¼šè¿›è¡Œåކ岿‰©å±•。
有三ç§å¼•用机制:转义å—符 (escape character), å•引å·å’ŒåŒå¼•å·ã€‚
ä¸€ä¸ªæœªè¢«å¼•ç”¨çš„åæ–œæ (\) 是转义å—符 escape character。
它ä¿ç•™å…¶åŽä¸‹ä¸€ä¸ªå—符的å—颿„义,除éžé‚£æ˜¯ä¸€ä¸ªæ–°è¡Œç¬¦ã€‚ 如果 \
和新行符æˆå¯¹å‡ºçŽ°ï¼Œå¹¶ä¸”åæ–œæ 自身没有被引用,那么 \<newline>
被视为ç»è¡Œæ ‡å¿— (æ„æ€æ˜¯ï¼Œå®ƒè¢«ä»Žè¾“å…¥æµä¸åˆ 除并忽略了)。
å°†å—符放在å•引å·ä¹‹ä¸ï¼Œå°†ä¿ç•™å¼•ç”¨ä¸æ‰€æœ‰å—符的å—颿„义。å•引å·ä¸èƒ½åŒ…å«åœ¨å•引å·å¼•用之ä¸ï¼Œå³ä½¿å‰é¢åŠ ä¸Šäº†åæ–œæ 。
å°†å—符放在åŒå¼•å·ä¸ï¼ŒåŒæ ·ä¿ç•™æ‰€æœ‰å—符的å—颿„义,例外的情况是 $, `, å’Œ
\。 å—符 $ å’Œ `
在åŒå¼•å·ä¸ä»ç„¶å…·æœ‰ç‰¹æ®Šæ„ä¹‰ã€‚åæ–œæ åªæœ‰åŽé¢æ˜¯ä¸‹åˆ—å—ç¬¦æ—¶æ‰æœ‰ç‰¹æ®Šæ„义: $,
`, ", \, 或 <newline>.
åŒå¼•å·å¯ä»¥åŒ…å«åœ¨åŒå¼•å·å¼•用ä¸ï¼Œä½†è¦åœ¨å‰é¢åŠ ä¸Šä¸€ä¸ªåæ–œæ 。
ç‰¹æ®Šçš„å‚æ•° * å’Œ @ 在åŒå¼•å·ä¸æœ‰ç‰¹æ®Šæ„义(å‚è§ä¸‹é¢çš„ 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 一个八比特å—符,它的值是八进制值 nnn (一到三个数å—)。
\xHH 一个八比特å—符,它的值是åå…进制值 HH
(一到两个åå…进制数å—)。
\cx 一个 ctrl-x å—符
扩展结果是å•引å·å¼•ç”¨çš„ï¼Œå°±å¥½åƒ $ 符å·ä¸å˜åœ¨ä¸€æ ·ã€‚
åŒå¼•å·å¼•用å—符串å‰é¢åŠ ä¸Šä¸€ä¸ª $ 符å·å°†ä½¿å¾—这个å—ç¬¦ä¸²è¢«æ ¹æ®å½“å‰è¯è¨€çŽ¯å¢ƒ
(locale) æ¥èŠ¬æ¿ å¦‚æžœå½“å‰è¯è¨€çŽ¯å¢ƒæ˜¯ C 或者 POSIX,这个符å·å°†è¢«å¿½ç•¥ã€‚
如果这个å—ç¬¦ä¸²è¢«èŠ¬æ°©â‘»å©Šæ¶£è€æ•²åˆºå©Šå”¤å³æ’¬ä¹“玫摹
(PARAMETERS)
ä¸€ä¸ªå‚æ•° parameter 是一个储å˜å€¼çš„实体。它å¯ä»¥æ˜¯ä¸€ä¸ªåç§° name,
ä¸€ä¸ªæ•°å—æˆ–è€…æ˜¯ä¸‹é¢ Special Parameters æ•°
ç« èŠ‚ä¸åˆ—出的特殊å—符之一。从 shell 的角度æ¥çœ‹ï¼Œä¸€ä¸ªå˜é‡ variable
是一个由åç§° name ä»£è¡¨çš„å‚æ•°ã€‚一个å˜é‡æœ‰ä¸€ä¸ªå€¼ value 以åŠé›¶ä¸ªæˆ–多个属性
attibutes。属性å¯ä»¥ä½¿ç”¨å†…建命令 declare æ¥è®¾ç½®(å‚è§ä¸‹é¢ shell
(SHELL BUILTIN COMMANDS) ç« èŠ‚ä¸å¯¹ declare çš„æè¿°)。
å¦‚æžœç»™ä¸€ä¸ªå‚æ•°èµ‹å€¼ï¼Œé‚£ä¹ˆå®ƒå°±è¢«å®šä¹‰äº†ã€‚空å—符串是有效的值。一旦一个å˜é‡è¢«å®šä¹‰äº†ï¼Œå®ƒåªèƒ½ç”¨å†…建命令
unset æ¥å–消(å‚è§ä¸‹é¢ shell (SHELL BUILTIN COMMANDS) ç« èŠ‚).
一个å˜é‡ variable å¯ä»¥ç”¨è¿™æ ·çš„è¯å¥å½¢å¼æ¥èµ‹å€¼ï¼š
name=[value]
如果没有给出值 value_ å˜é‡å°±è¢«èµ‹ä¸ºç©ºå—符串。所有值 values 都-
è¿‡äº†æ³¢æµªçº¿æ‰©å±•ï¼Œå‚æ•°å’Œå˜é‡æ‰©å±•,命令替æ¢ï¼Œç®—æœ¯æ‰©å±•å’Œå¼•ç”¨çš„åˆ é™¤(å‚è§ä¸‹é¢çš„
EXPANSION å±•ç« èŠ‚)。如果å˜é‡è®¾ç½®äº† integer 属性,那么值 value
将进行算术扩展,å³ä½¿æ²¡æœ‰åº”用 $((...)) 扩展 (å‚è§ä¸‹é¢çš„ Arithmetic
Expansion å±•ç« èŠ‚)。 ä¸ä¼šè¿›è¡Œè¯çš„æ‹†åˆ†ï¼Œé™¤éžæ˜¯ä¸‹é¢ Special Parame-
ters æ•° ä¸æåˆ°çš„ "$@"。
ä¸ä¼šè¿›è¡Œè·¯å¾„的扩展。赋值è¯å¥ä¹Ÿå‡ºçŽ°åœ¨ä¸‹åˆ—å†…å»ºå‘½ä»¤ä¸ï¼Œä½œä¸ºå®ƒä»¬çš„傿•°ï¼š
declare, typeset, export, readonly, 和 local 。
Positional Parameters æ•°
ä½ç½®å‚æ•° positional parameter 是以一或多个数å—ä»£è¡¨çš„å‚æ•°ï¼Œé™¤äº†
0。ä½ç½®å‚数是在 shell å¯åŠ¨æ—¶ï¼Œæ ¹æ®å®ƒçš„傿•°æ¥èµ‹å€¼çš„, 也å¯ä»¥ç”¨å†…建命令
set æ¥é‡æ–°èµ‹å€¼ã€‚ä½ç½®å‚æ•°ä¸èƒ½ç”¨èµ‹å€¼è¯å¥æ¥èµ‹å€¼ã€‚在一个 shell
函数被执行的时候,ä½ç½®å‚æ•°ä¼šè¢«æš‚æ—¶åœ°æ›¿æ¢æŽ‰ (å‚è§ä¸‹é¢çš„ FUNCTIONS
ç« èŠ‚)。
当ä½ç½®å‚æ•°ç”±ä¸¤ä¸ªä»¥ä¸Šçš„æ•°å—æž„æˆæ—¶ï¼Œå®ƒå¿…须放在括å·å†… (å‚è§ä¸‹é¢çš„ EXPAN-
SION å±•ç« èŠ‚)。
Special Parameters æ•°
shell å¯¹ä¸€äº›å‚æ•°åšç‰¹æ®Šå¤„ç†ã€‚è¿™äº›å‚æ•°åªèƒ½è¢«å¼•用而ä¸èƒ½è¢«èµ‹å€¼ã€‚
* 扩展为ä½ç½®å‚数,从 1
开始。如果扩展å‘生在åŒå¼•å·ä¸ï¼Œå®ƒæ‰©å±•为一个è¯ï¼Œå€¼æ˜¯å„ä¸ªå‚æ•°ï¼Œä»¥ç‰¹æ®Šå˜é‡
IFS 的第一个å—符分隔。也就是说,"$*" ç‰ä»·äºŽ "$1c$2c...",这里 c
是å˜é‡ IFS 的第一个å—符。如果没有设置 IF,
é‚£ä¹ˆå‚æ•°å°†ç”¨ç©ºæ ¼åˆ†éš”。 IFS
@ 扩展为ä½ç½®å‚数,从 1
开始。如果扩展å‘生在åŒå¼•å·ä¸ï¼Œæ¯ä¸ªå‚数都将扩展为一个è¯ã€‚也就是说,
"$@" ç‰ä»·äºŽ "$1" "$2" ... 如果ä½ç½®å‚æ•°ä¸å˜åœ¨ï¼Œ"$@" å’Œ $@
扩展为空 (å³ï¼Œå®ƒä»¬è¢«åˆ 除了)。
# 扩展为ä½ç½®å‚数的个数,以å进制表示。
? 扩展为最近执行的å‰å°ç®¡é“的状æ€ã€‚
- 扩展为当å‰é€‰é¡¹æ ‡å¿—ã€‚æ ‡å¿—æ˜¯åœ¨å¯åŠ¨æ—¶æˆ–ä»¥å†…å»ºå‘½ä»¤ set
指定的,或者是 shell 自身设置的 (例如选项 -i )。
$ 扩展为 shell 的进程 ID。在一个 () å shell ä¸ï¼Œå®ƒæ‰©å±•为当å‰
shell çš„ 进程 ID è€Œä¸æ˜¯å shell 的。
! 扩展为最近一次执行的åŽå° (异æ¥) 命令的进程å·ã€‚
0 扩展为 shell 或者 shell 脚本的å称。这个å˜é‡æ˜¯åœ¨ shell
åˆå§‹åŒ–时设置的。如果 bash 是执行脚本文件时å¯åŠ¨çš„ï¼Œ $0
将设置为那个文件的å称。如果 bash å¯åŠ¨æ—¶çš„å‚æ•°åŒ…å« -,那么 $0
被设置为å¯åŠ¨å‘½ä»¤è¡Œè¢«æ‰§è¡ŒåŽçš„ç¬¬ä¸€ä¸ªå‚æ•°ï¼Œå¦‚果有的è¯ã€‚å¦åˆ™ï¼Œå®ƒè¢«è®¾ç½®ä¸ºç”¨æ¥å¯åЍ
bash 的文件åï¼Œå°±æ˜¯å‚æ•° 0。
_ shell å¯åŠ¨æ—¶ï¼Œè®¾ç½®ä¸º shell æˆ–å‚æ•°ä¸è¢«æ‰§è¡Œçš„ shell
脚本的ç»å¯¹è·¯å¾„å。
ç„¶åŽï¼Œåœ¨æ‰©å±•时扩展为上一个命令的最åŽä¸€ä¸ªå‚数。它也被设置为被执行的æ¯ä¸ªå‘½ä»¤çš„æ–‡ä»¶å…¨å并且
被设置到这个命令执行的环境当ä¸ã€‚å½“æ£€æŸ¥é‚®ä»¶æ—¶ï¼Œè¿™ä¸ªå‚æ•°ä¿å˜ç€æ£åœ¨æ£€æŸ¥çš„邮件文件的å称。
Shell Variables é‡
shell 定义了下列å˜é‡ï¼š
BASH 扩展为用æ¥å¯åŠ¨å½“å‰ bash 实例的文件全å。
BASH_VERSINFO
一个åªè¯»æ•°ç»„å˜é‡ï¼Œæˆå‘˜ä¿å˜ç€å½“å‰ bash
实例的版本信æ¯ã€‚èµ‹äºˆæ•°ç»„å…ƒç´ çš„å€¼æ˜¯å¦‚ä¸‹è¿™äº›ï¼š
BASH_VERSINFO[0] ä¸»ç‰ˆæœ¬å· (release).
BASH_VERSINFO[1] æ¬¡ç‰ˆæœ¬å· (version).
BASH_VERSINFO[2] è¡¥ä¸ç‰ˆæœ¬
BASH_VERSINFO[3] 编译信æ¯
BASH_VERSINFO[4] å‘å¸ƒæ—¶çš„çŠ¶æ€ (例如, beta1).
BASH_VERSINFO[5] MACHTYPE å¹³å°ç±»åž‹
BASH_VERSION
扩展为一个å—符串,æè¿°äº†è¿™ä¸ª bash. 实例的版本。
COMP_CWORD
${COMP_WORDS} 的索引,指å‘当å‰å…‰æ ‡ä½ç½®æ‰€åœ¨çš„è¯ã€‚
这个å˜é‡åªæœ‰åœ¨è¢«å¯ç¼–程补全功能 (å‚è§ä¸‹é¢çš„ Programmable Comple-
tion ç« èŠ‚) 调用的 shell å‡½æ•°ä¸æ‰å¯ç”¨ã€‚
COMP_LINE
当å‰å‘½ä»¤è¡Œã€‚这个å˜é‡åªæœ‰åœ¨è¢«å‘½ä»¤è¡¥å…¨åŠŸèƒ½è°ƒç”¨çš„ shell
å‡½æ•°å’Œå¤–éƒ¨å‘½ä»¤ä¸æ‰å¯ç”¨ã€‚
COMP_POINT
相对于当å‰å‘½ä»¤èµ·å§‹å¤„的当å‰å…‰æ ‡ä½ç½®ã€‚如果当å‰å…‰æ ‡ä½ç½®æ˜¯å½“å‰å‘½ä»¤çš„æœ«ç«¯ï¼Œ
它的值就和 ${#COMP_LINE} 相ç‰ã€‚
这个å˜é‡åªæœ‰åœ¨è¢«å‘½ä»¤è¡¥å…¨åŠŸèƒ½è°ƒç”¨çš„ shell
å‡½æ•°å’Œå¤–éƒ¨å‘½ä»¤ä¸æ‰å¯ç”¨ã€‚
COMP_WORDS
一个数组å˜é‡ (å‚è§ä¸‹é¢çš„
Arrays(数组)一节),由当å‰å‘½ä»¤è¡Œçš„å„个å•è¯æž„æˆã€‚
这个å˜é‡åªæœ‰åœ¨è¢«å‘½ä»¤è¡¥å…¨åŠŸèƒ½è°ƒç”¨çš„ shell å‡½æ•°ä¸æ‰å¯ç”¨ã€‚
DIRSTACK
一个数组å˜é‡ï¼ŒåŒ…å«å½“å‰ç›®å½•æ ˆçš„å†…å®¹ã€‚æ ˆä¸çš„目录排列的顺åºå°±æ˜¯ç”¨å†…建命令
dirs
显示时的顺åºã€‚对这个数组å˜é‡çš„æˆå‘˜èµ‹å€¼å¯ä»¥ç”¨æ¥ä¿®æ”¹æ ˆä¸å·²æœ‰çš„ç›®å½•ï¼Œä½†æ˜¯è¦æ·»åŠ å’Œåˆ é™¤ç›®å½•å°±å¿…é¡»ä½¿ç”¨
内建命令 pushd å’Œ pop。对它赋值ä¸ä¼šæ”¹å˜å½“å‰ç›®å½•ã€‚å¦‚æžœå–æ¶ˆäº†
DIRSTACK 的定义,它就失去了它的特殊æ„义,å³ä½¿åŽæ¥é‡æ–°å®šä¹‰å®ƒã€‚
EUID 扩展为当å‰ç”¨æˆ·çš„æœ‰æ•ˆç”¨æˆ· ID。它在 shell å¯åŠ¨æ—¶è®¾ç½®ã€‚å®ƒæ˜¯åªè¯»çš„。
FUNCNAME
当剿‰§è¡Œçš„ shell 函数å。这个å˜é‡åªæœ‰åœ¨æ‰§è¡Œä¸€ä¸ª shell
函数时å˜åœ¨ã€‚å‘ FUNCNAME èµ‹å€¼æ²¡æœ‰æ•ˆæžœå¹¶ä¸”è¿”å›žä¸€ä¸ªé”™è¯¯ã€‚å¦‚æžœå–æ¶ˆäº†
FUNCNAME 的定义,它就失去了特殊的æ„义,å³ä½¿åŽæ¥é‡æ–°å®šä¹‰å®ƒã€‚
GROUPS 一个数组å˜é‡ï¼ŒåŒ…å«å½“å‰ç”¨æˆ·æ‰€å±žçš„ç»„çš„åˆ—è¡¨ã€‚å‘ GROUPS
èµ‹å€¼æ²¡æœ‰æ•ˆæžœå¹¶ä¸”è¿”å›žä¸€ä¸ªé”™è¯¯ã€‚å¦‚æžœå–æ¶ˆäº† GROUPS
的定义,它就失去了特殊的æ„义,å³ä½¿åŽæ¥é‡æ–°å®šä¹‰å®ƒã€‚
HISTCMD
当å‰å‘½ä»¤çš„历å²ç¼–å·ï¼Œæˆ–者历å²åˆ—表ä¸çš„ç´¢å¼•ã€‚å¦‚æžœå–æ¶ˆäº† HISTCMD
的定义,它就失去了特殊的æ„义,å³ä½¿åŽæ¥é‡æ–°å®šä¹‰å®ƒã€‚
HOSTNAME
自动设置为当å‰çš„主机å。
HOSTTYPE
自动设置为一个å—ç¬¦ä¸²ï¼Œå”¯ä¸€åœ°æ ‡è¯†ç€æ£åœ¨è¿è¡Œ bash
的机器类型。默认值是系统相关的。
LINENO æ¯æ¬¡å¼•ç”¨è¿™ä¸ªå‚æ•°æ—¶ï¼Œshell
将它替æ¢ä¸ºä¸€ä¸ªæŒ‡ç¤ºåœ¨è„šæœ¬æˆ–å‡½æ•°ä¸å½“å‰è¡Œå·çš„å进制数å—(从 1
开始)。
å¦‚æžœä¸æ˜¯åœ¨è„šæœ¬æˆ–å‡½æ•°ä¸ï¼Œæ›¿æ¢å¾—到的值ä¸ä¸€å®šæœ‰æ„ä¹‰ã€‚å¦‚æžœå–æ¶ˆäº†
LINENO 的定义,它就失去了特殊的æ„义,å³ä½¿åŽæ¥é‡æ–°å®šä¹‰å®ƒã€‚
MACHTYPE
自动设置为一个å—符串,完整的æè¿°äº†æ£åœ¨è¿è¡Œ bash
çš„ç³»ç»Ÿç±»åž‹ï¼Œæ ¼å¼æ˜¯æ ‡å‡†çš„ GNU cpu-company-system
æ ¼å¼ã€‚默认值是系统相关的。
OLDPWD 上一次命令 cd 设置的工作目录。
OPTARG 内建命令 getopts 处ç†çš„æœ€åŽä¸€ä¸ªé€‰é¡¹å‚数值 (å‚è§ä¸‹é¢çš„ shell
(SHELL BUILTIN COMMANDS) ç« èŠ‚)。
OPTIND 内建命令 getopts 将处ç†çš„ä¸‹ä¸€ä¸ªå‚æ•°çš„索引 (å‚è§ä¸‹é¢çš„ shell
(SHELL BUILTIN COMMANDS) ç« èŠ‚)。
OSTYPE 自动设置的一个å—符串,æè¿°äº†æ£åœ¨è¿è¡Œ bash
çš„æ“作系统。默认值是系统相关的。
PIPESTATUS
一个数组å˜é‡ (å‚è§ä¸‹é¢çš„ Arrays
ç« èŠ‚)ï¼ŒåŒ…å«æœ€è¿‘执行的å‰å°ç®¡é“ä¸çš„进程(å¯èƒ½åªåŒ…å«ä¸€ä¸ªå‘½ä»¤)的退出状æ€ã€‚
PPID shell 的父进程的进程å·ã€‚这个å˜é‡æ˜¯åªè¯»çš„。
PWD ç”± cd 命令设置的当å‰å·¥ä½œç›®å½•。
RANDOM æ¯æ¬¡å¼•ç”¨è¿™ä¸ªå‚æ•°æ—¶ï¼Œéƒ½ä¼šäº§ç”Ÿä¸€ä¸ª 0 到 32767
ä¹‹é—´çš„éšæœºæ•´æ•°ã€‚å¯ä»¥é€šè¿‡å‘ RANDOM
赋值æ¥åˆå§‹åŒ–éšæœºæ•°åºåˆ—ã€‚å¦‚æžœå–æ¶ˆäº† RANDOM
的定义,它就失去了特殊的æ„义,å³ä½¿åŽæ¥é‡æ–°å®šä¹‰å®ƒã€‚
REPLY å˜é‡çš„值将作为内建命令 read çš„è¾“å…¥ï¼Œå¦‚æžœå‘½ä»¤æ²¡æœ‰å‚æ•°çš„è¯ã€‚
SECONDS
æ¯æ¬¡å¼•ç”¨è¿™ä¸ªå‚æ•°æ—¶ï¼Œè¿”回 shell 自è¿è¡Œä»¥æ¥çš„ç§’æ•°ã€‚å¦‚æžœå‘ SECONDS
赋值,æ¤åŽå¯¹å®ƒçš„å¼•ç”¨å°†è¿”å›žè‡ªèµ‹å€¼æ—¶èµ·çš„ç§’æ•°åŠ ä¸Šæ‰€èµ‹äºˆçš„å€¼ã€‚å¦‚æžœå–æ¶ˆ
SECONDS 的定义,它就失去了特殊的æ„义,å³ä½¿åŽæ¥é‡æ–°å®šä¹‰å®ƒã€‚
SHELLOPTS
一个冒å·åˆ†éš”的被å…许的 shell é€‰é¡¹åˆ—è¡¨ã€‚åˆ—è¡¨ä¸æ¯ä¸ªè¯éƒ½æ˜¯å†…置命令
set çš„ -o é€‰é¡¹çš„æœ‰æ•ˆå‚æ•°ã€‚ SHELLOPTS ä¸å‡ºçŽ°çš„é€‰é¡¹ä¹Ÿæ˜¯ set -o
显示为 on 的选项。如果 bash
å¯åŠ¨æ—¶ä»ŽçŽ¯å¢ƒä¸æ‰¾åˆ°è¿™ä¸ªå˜é‡ï¼Œé‚£ä¹ˆåœ¨è¯»å–任何é…置文件之å‰ï¼Œåˆ—表ä¸çš„æ¯ä¸ªé€‰é¡¹éƒ½å°†è¢«è®¾ç½®ã€‚è¿™ä¸ªå˜é‡æ˜¯åªè¯»çš„。
SHLVL æ¯æ¬¡å¯åŠ¨ä¸€ä¸ª bash çš„å®žä¾‹æ—¶éƒ½ä¼šå¢žåŠ ã€‚
UID 扩展为当å‰ç”¨æˆ·çš„ ID,在å¯åŠ¨æ—¶åˆå§‹åŒ–。这个å˜é‡æ˜¯åªè¯»çš„。
下列å˜é‡è¢« shell 使用。有时 bash
会为å˜é‡èµ‹é»˜è®¤å€¼ï¼›è¿™äº›æƒ…况在下é¢ä¼šæ ‡å‡ºã€‚
BASH_ENV
如果 bash 在执行一个 shell
脚本时设定了这个å˜é‡ï¼Œå®ƒçš„值将被解释为一个文件å, 包å«ç€åˆå§‹åŒ–
shell ç”¨åˆ°çš„å‘½ä»¤ï¼Œå°±åƒ ~/.bashrc ä¸ä¸€æ ·ã€‚ BASH_ENV
的值在被解释为一个文件å之å‰è¦-
è¿‡å‚æ•°æ‰©å±•,命令替æ¢å’Œç®—术扩展。ä¸ä¼šä½¿ç”¨ PATH æ¥æŸ¥æ‰¾ç»“果文件å。
CDPATH 命令 cd çš„æœç´¢è·¯å¾„。这是一个冒å·åˆ†éš”的目录列表,shell ä»Žä¸æŸ¥æ‰¾
cd å‘½ä»¤çš„ç›®æ ‡ç›®å½•ã€‚å¯ä»¥æ˜¯è¿™æ ·ï¼š ".:~:/usr".
COLUMNS
用在内建命令 select 当ä¸ï¼Œç”¨æ¥åˆ¤æ–输出选择列表时的终端宽度。
è‡ªåŠ¨æ ¹æ® SIGWINCH ä¿¡å·æ¥è®¾ç½®ã€‚
COMPREPLY
一个数组å˜é‡ï¼Œbash 从ä¸è¯»å–å¯èƒ½çš„命令补全。
它是由命令补全功能调用的 shell 函数产生的。
FCEDIT 内建命令 fc 默认的编计鳌
FIGNORE
一个冒å·åˆ†éš”çš„åŽç¼€å列表,在进行文件å补全时被忽略 (å‚è§ä¸‹é¢çš„
READLINE
ç« èŠ‚)。一个åŽç¼€æ»¡è¶³å…¶ä¸ä¹‹ä¸€çš„æ–‡ä»¶å被排除在匹é…的文件å之外。å¯ä»¥æ˜¯è¿™æ ·ï¼š
".o:~".
GLOBIGNORE
一个冒å·åˆ†éš”的模å¼åˆ—è¡¨ï¼Œå®šä¹‰äº†è·¯å¾„åæ‰©å±•æ—¶è¦å¿½ç•¥çš„æ–‡ä»¶å集åˆã€‚
如果一个文件å与路径扩展模å¼åŒ¹é…ï¼ŒåŒæ—¶åŒ¹é… GLOBIGNORE
ä¸çš„ä¸€ä¸ªæ¨¡å¼æ—¶ï¼Œå®ƒè¢«ä»ŽåŒ¹é…列表ä¸åˆ 除。
HISTCONTROL
如果设置为 ignorespace, 以 space
开头的行将ä¸ä¼šæ’入到历å²åˆ—表ä¸ã€‚如果设置为 ignoredups,
匹é…上一次历å²è®°å½•的行将ä¸ä¼šæ’入。设置为 ignoreboth
会结åˆè¿™ä¸¤ç§é€‰é¡¹ã€‚如果没有定义,或者设置为其他值,所有解释器读å–的行都将å˜å…¥åކå²åˆ—表,
但还è¦ç«Ÿ HISTIGNORE 处ç†ã€‚这个å˜é‡çš„作用å¯ä»¥è¢« HISTIGNORE
替代。多行的组åˆå‘½ä»¤çš„第二和其余行都ä¸ä¼šè¢«æ£€æµ‹ï¼Œä¸ç®¡ HISTCONTROL
æ˜¯ä»€ä¹ˆï¼Œéƒ½ä¼šåŠ å…¥åˆ°åŽ†å²ä¸ã€‚
HISTFILE
ä¿å˜å‘½ä»¤åކå²çš„æ–‡ä»¶å (å‚è§ä¸‹é¢çš„ HISTORY ç« èŠ‚)。默认值是
~/.bash_historyã€‚å¦‚æžœå–æ¶ˆå®šä¹‰ï¼Œåœ¨äº¤äº’å¼ shell 退出时
命令历å²å°†ä¸ä¼šä¿å˜ã€‚
HISTFILESIZE
åŽ†å²æ–‡ä»¶ä¸åŒ…å«çš„æœ€å¤§è¡Œæ•°ã€‚当为这个å˜é‡èµ‹å€¼æ—¶ï¼Œå¦‚果需è¦çš„è¯ï¼Œåކ岿–‡ä»¶å°†è¢«æˆªæ–
æ¥å®¹çº³ä¸è¶…过这个值的行。默认值是 500ã€‚åŽ†å²æ–‡ä»¶åœ¨äº¤äº’å¼ shell
退出时 也会被截æ–到这个值。
HISTIGNORE
一个冒å·åˆ†éš”的模å¼åˆ—表,用æ¥åˆ¤æ–那个命令行应当ä¿å˜åœ¨åކå²åˆ—表ä¸ã€‚æ¯ä¸ªæ¨¡å¼
都定ä½äºŽè¡Œé¦–ï¼Œå¿…é¡»åŒ¹é…æ•´è¡Œ (没有å‡å®šæ·»åŠ `*')。在 HISTCONTROL
指定的测试结æŸåŽï¼Œè¿™é‡Œçš„æ¯ä¸ªæ¨¡å¼éƒ½è¦è¢«æµ‹è¯•。除了平常的 shell
模å¼åŒ¹é…å—符, `&' 匹é…上一个历å²è¡Œã€‚`&'
å¯ä»¥ä½¿ç”¨åæ–œæ æ¥è½¬ä¹‰ï¼›åæ–œæ 在
å°è¯•匹é…之å‰å°†è¢«åˆ 除。多行的组åˆå‘½ä»¤çš„第二行以åŠåŽç»è¡Œéƒ½ä¸ä¼šè¢«æµ‹è¯•,ä¸ç®¡
HISTIGNORE æ˜¯ä»€ä¹ˆï¼Œéƒ½å°†åŠ å…¥åˆ°åŽ†å²ä¸ã€‚
HISTSIZE
命令历å²ä¸ä¿å˜çš„åŽ†å²æ•°é‡ (å‚è§ä¸‹é¢çš„ HISTORY
ç« èŠ‚)。默认值是 500。
HOME 当å‰ç”¨æˆ·çš„个人目录;内建命令 cd
çš„é»˜è®¤å‚æ•°ã€‚在执行波浪线扩展时也用到这个å˜é‡ã€‚
HOSTFILE
包å«ä¸€ä¸ªæ ¼å¼å’Œ /etc/hosts 相åŒçš„æ–‡ä»¶å,当 shell
需è¦è¡¥å…¨ä¸»æœºåæ—¶è¦è¯»å–它。shell è¿è¡Œè¿‡ç¨‹ä¸
å¯ä»¥æ”¹å˜å¯èƒ½çš„主机å补全列表;改å˜ä¹‹åŽä¸‹ä¸€æ¬¡éœ€è¦ä¸»æœºå补全时
bash ä¼šå°†æ–°æ–‡ä»¶çš„å†…å®¹æ·»åŠ åˆ°æ—§åˆ—è¡¨ä¸ã€‚如果定义了 HOSTFILE
但是没有赋值,bash å°†å°è¯•è¯»å– /etc/hosts
文件æ¥èŽ·å¾—å¯èƒ½çš„主机åè¡¥å…¨åˆ—è¡¨ã€‚å½“å–æ¶ˆ HOSTFILE
的定义时,主机å列表将清空。
IFS å†…éƒ¨å—æ®µåˆ†éš”符 Internal Field Separator
用æ¥åœ¨æ‰©å±•之åŽè¿›è¡Œåˆ†è¯ï¼Œä½¿ç”¨å†…部命令 read 将行划分æˆè¯ã€‚默认值是
``<space><tab><newline>''。
IGNOREEOF
æŽ§åˆ¶äº¤äº’å¼ shell 接å—到唯一一个 EOF
å—符时的行为。如果有定义,值是需è¦åœ¨ä¸€è¡Œçš„开始连ç»è¾“å…¥ EOF
å—符,直到å¯ä»¥ä½¿ bash
退出的å—符个数。如果这个å˜é‡å˜åœ¨ï¼Œä½†æ˜¯å€¼ä¸æ˜¯ä¸€ä¸ªæ•°å—或者没有赋值,默认值是
10。 如果å˜é‡æ²¡æœ‰å®šä¹‰ï¼Œ EOF æ ‡å¿—ç€è¾“入的结æŸã€‚
INPUTRC
readline çš„å¯åЍé…ç½®æ–‡ä»¶ï¼Œè€Œä¸æ˜¯é»˜è®¤çš„ ~/.inputrc (å‚è§ä¸‹é¢çš„
READLINE ç« èŠ‚)。
LANG 用æ¥å†³å®šæ²¡æœ‰ç‰¹åœ°ç”¨ LC_ å˜é‡æŒ‡å®šçš„è¯è¨€çŽ¯å¢ƒé¡¹ã€‚
LC_ALL 这个å˜é‡è¶…越了 LANG 和所有其他指定è¯è¨€çŽ¯å¢ƒé¡¹çš„ LC_ å˜é‡ã€‚
LC_COLLATE
这个å˜é‡å†³å®šäº†ä¸ºè·¯å¾„æ‰©å±•çš„ç»“æžœæŽ’åºæ—¶çš„å—æ¯é¡ºåºï¼Œå†³å®šäº†èŒƒå›´è¡¨è¾¾å¼çš„行为,
ç‰ä»·ç±»ï¼Œå’Œè·¯å¾„扩展ä¸çš„归并顺åºä»¥åŠæ¨¡å¼åŒ¹é…。
LC_CTYPE
这个å˜é‡å†³å®šäº†å—ç¬¦çš„è§£é‡Šå’Œè·¯å¾„æ‰©å±•ä»¥åŠæ¨¡å¼åŒ¹é…ä¸å—符类的行为。
LC_MESSAGES
这个å˜é‡å†³å®šäº†èŠ¬èƒ $ å‰å¯¼çš„åŒå¼•å·å—符串时的è¯è¨€çŽ¯å¢ƒã€‚
LC_NUMERIC
这个å˜é‡å†³å®šäº†æ ¼å¼åŒ–æ•°å—æ—¶çš„è¯è¨€çŽ¯å¢ƒåˆ†ç±»ã€‚
LINES 内建命令 select 用它æ¥åˆ¤æ–输出选择列表时的列宽度。在收到 SIG-
WINCH ä¿¡å·æ—¶è‡ªåŠ¨è®¾ç½®ã€‚
MAIL å¦‚æžœè¿™ä¸ªå‚æ•°è®¾ç½®ä¸ºä¸€ä¸ªæ–‡ä»¶å,并且没有设置环境å˜é‡ MAILPATH
çš„è¯ï¼Œ bash 将在这个文件ä¸é€šçŸ¥ç”¨æˆ·æœ‰é‚®ä»¶åˆ°è¾¾ã€‚
MAILCHECK
指定 bash 检查邮件的频率是多少,以秒为å•ä½ã€‚默认值是 60
ç§’ã€‚éœ€è¦æ£€æŸ¥é‚®ä»¶çš„æ—¶å€™ï¼Œshell 在显示æç¤ºç¬¦ä¹‹å‰å°†è¿›è¡Œæ£€æŸ¥ã€‚
å¦‚æžœå–æ¶ˆå®ƒçš„定义,或者设置为并éžå¤§äºŽç‰äºŽé›¶çš„æ•°å€¼ï¼Œshell
å°†ç¦æ¢é‚®ä»¶æ£€æŸ¥ã€‚
MAILPATH
一个冒å·åˆ†éš”的文件ååˆ—è¡¨ï¼Œä»Žä¸æ£€æŸ¥é‚®ä»¶ã€‚当邮件到达æŸä¸ªç‰¹æ®Šæ–‡ä»¶ä¸æ—¶ï¼Œè¾“出的特定消æ¯å¯ä»¥
通过将文件å与消æ¯ä»¥ `?' åˆ†éš”æ¥æŒ‡å®šã€‚ 在消æ¯çš„æ–‡æœ¬ä¸ï¼Œ$_
扩展为当å‰é‚®ä»¶æ–‡ä»¶çš„æ–‡ä»¶å。例如:
MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has
mail!"'
Bash
为这个å˜é‡æä¾›é»˜è®¤å€¼ï¼Œä½†æ˜¯å®ƒä½¿ç”¨çš„用户邮件文件的ä½ç½®æ˜¯ç³»ç»Ÿç›¸å…³çš„
(例如,/var/mail/$USER)。
OPTERR 如果设置为 1, bash 显示内建命令 getopts 产生的错误消æ¯
(å‚è§ä¸‹é¢çš„ shell (SHELL BUILTIN COMMANDS) ç« èŠ‚)ã€‚æ¯æ¬¡
shell å¯åŠ¨æ—¶æˆ–è€…ä¸€ä¸ª shell 脚本被执行时 OPTERR 被åˆå§‹åŒ–为 1。
PATH æœç´¢å‘½ä»¤çš„路径。它是一个冒å·åˆ†å‰²çš„目录列表,shell ä»Žä¸æœç´¢å‘½ä»¤
(å‚è§ä¸‹é¢çš„ (COMMAND EXECUTION)
段è½)。默认的路径是系统相关的,是由安装 bash
的系统管ç†å‘˜è®¾ç½®çš„。通常它的值是
``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.''。
POSIXLY_CORRECT
如果 bash å¯åŠ¨çŽ¯å¢ƒä¸æœ‰è¿™ä¸ªå˜é‡ï¼Œå®ƒå°†åœ¨è¯»å–å¯åЍé…置文件之å‰è¿›å…¥
posix modeï¼Œå°±å¥½åƒæä¾›äº† --posix å¯åЍ傿•°ä¸€æ ·ã€‚如果 shell
è¿è¡Œè¿‡ç¨‹ä¸è®¾ç½®äº†å®ƒï¼Œbash å°±å¯ç”¨ posix modeï¼Œå°±å¥½åƒæ‰§è¡Œäº† set -o
posix å‘½ä»¤ä¸€æ ·ã€‚
PROMPT_COMMAND
å¦‚æžœæœ‰å®šä¹‰ï¼Œå®ƒçš„å€¼å°†ä½œä¸ºä¸€ä¸ªå‘½ä»¤ï¼Œæ¯æ¬¡æ˜¾ç¤ºä¸»æç¤ºç¬¦ä¹‹å‰éƒ½ä¼šæ‰§è¡Œã€‚
PS1 è¿™ä¸ªå‚æ•°çš„值被扩展 (å‚è§ä¸‹é¢çš„ PROMPTING 符
段è½),用作主æç¤ºç¬¦å—符串。默认值是 ``\s-\v\$ ''。
PS2 è¿™ä¸ªå‚æ•°çš„å€¼åŒ PS1 一起被扩展,用作次æç¤ºç¬¦å—符串。默认值是 ``>
''。
PS3 è¿™ä¸ªå‚æ•°çš„值被用作内建命令 select çš„æç¤ºç¬¦ (å‚è§ä¸Šé¢çš„ SHELL
GRAMMAR æ³•ç« èŠ‚)。
PS4 è¿™ä¸ªå‚æ•°çš„å€¼åŒ PS1 一起被扩展,在执行跟踪ä¸åœ¨ bash
显示æ¯ä¸ªå‘½ä»¤ä¹‹å‰æ˜¾ç¤ºã€‚需è¦çš„è¯ï¼Œ PS4
的第一个å—符会被å¤åˆ¶å¤šæ¬¡ï¼Œæ¥æŒ‡ç¤º indirection 的层数。默认值是
``+ ''。
TIMEFORMAT
在å‰ç¼€ time ä¿ç•™å—的管é“ä¸ï¼Œè¿™ä¸ªå‚æ•°çš„å€¼ç”¨ä½œæ ¼å¼å—符串,
指定计时信æ¯å¦‚何显示。å—符 % 引入的转义åºåˆ—,被扩展为时间值
或其他信æ¯ã€‚转义åºåˆ—和它们的å«ä¹‰å¦‚下所示;括å·ä¸æ˜¯å¯é€‰çš„æˆåˆ†ã€‚
%% 一个å—é¢ä¸Šçš„ %。
%[p][l]R çº æ°–å¥”æ´Œæ‚¦çˆ°æ‰‘æª
%[p][l]U CPU 在用户模å¼ä¸‹æ‰§è¡Œçš„秒数。
%[p][l]S CPU 在系统模å¼ä¸‹æ‰§è¡Œçš„秒数。
%P CPU 使用率,算法是 (%U + %S) / %R。
å¯é€‰çš„ p 是指定精度 (å°æ•°ç‚¹åŽæ•°å—使•°) 的数值。 如果是 0
å°±ä¸è¾“å‡ºå°æ•°ç‚¹æˆ–å°æ•°å€¼ã€‚æœ€å¤šæŒ‡å®šåˆ°å°æ•°ç‚¹åŽä¸‰ä½ï¼› 如果 p 大于 3
就会被改为 3。如果没有指定 p,默认使用 3。
å¯é€‰çš„ l æŒ‡å®šäº†é•¿æ ¼å¼ï¼ŒåŒ…å«åˆ†é’Ÿï¼Œæ ¼å¼æ˜¯ MMmSS.FFs。 p
çš„å€¼å†³å®šäº†æ˜¯ä¸æ˜¯åŒ…å«å°æ•°ä½ã€‚
如果没有设置这个值,bash å‡å®šå®ƒçš„值是
$'\nreal\t%3lR\nuser\t%3lU\nsys%3lS'。
如果它是空值,就ä¸ä¼šæ˜¾ç¤ºè®¡æ—¶ä¿¡æ¯ã€‚æ˜¾ç¤ºæ ¼å¼å—ç¬¦ä¸²çš„æ—¶å€™ï¼Œä¼šåŠ ä¸Š
一个å‰å¯¼çš„æ–°è¡Œç¬¦ã€‚
TMOUT 如果设置为大于 0 的值,TMOUT 被当作内建命令 read 的默认超时
ç‰å¾…时间。如果ç‰å¾…终端输入时, TMOUT 秒之åŽä»ç„¶æ²¡æœ‰è¾“入, select
命令将终æ¢ã€‚在交互的 shell ä¸ï¼Œå®ƒçš„值被解释为显示了
主æç¤ºç¬¦ä¹‹åŽç‰å¾…输入的秒数。如果竟飧雒胧笕匀幻挥惺淙耄
Bash 将退出。
auto_resume
这个å˜é‡æŽ§åˆ¶äº† shell
如何与用户和作业控制交互。如果设置了这个å˜é‡ï¼Œ
一个ä¸åŒ…å«é‡å®šå‘çš„å•个è¯çš„简å•命令,将作为æ¢å¤è¢«ä¸æ–的作业的指示。
ä¸å…许出现模棱两å¯çš„æƒ…况;如果有多个作业都以这个è¯èµ·å§‹ï¼Œå°†æ¢å¤æœ€è¿‘è¿è¡Œ
çš„ä½œä¸šã€‚åœ¨è¿™ç§æƒ…å½¢ä¸‹ï¼Œè¢«ä¸æ–的作业的 name
是用于å¯åŠ¨å®ƒçš„å‘½ä»¤è¡Œã€‚å¦‚æžœå€¼è®¾ç½®ä¸º exact_
给出的å—符串必须精确匹é…è¢«ä¸æ–的作业å;如果设置为 substring,
给出的å—符串需è¦åŒ¹é…è¢«ä¸æ–的作业åçš„å串。值 substring
çš„åŠŸèƒ½ä¸Žä½œä¸šæ ‡è¯†ç¬¦ %? 功能类似 (å‚è§ä¸‹é¢çš„ JOB CONTROL 制
ç« èŠ‚)。如果设置为任何其他值,给出的å—ç¬¦ä¸²å¿…é¡»æ˜¯è¢«ä¸æ–的作业的å‰ç¼€ï¼›
è¿™æ ·åšä¸Žä½œä¸šæ ‡è¯†ç¬¦ % 功能类似。
histchars
两到三个å—符,控制ç€åކ岿‰©å±•和分段 (tokenization,å‚è§ä¸‹é¢çš„
HISTORY EXPANSION ç« èŠ‚)。第一个å—符是 history expan-
sion(åŽ†å²æ‰©å±•) å—符, 这个å—ç¬¦è¡¨æ˜Žäº†åŽ†å²æ‰©å±•的开始,通常是 `!'。
第二个å—符是 quick substitution(快速替æ¢) å—符,
å®ƒæ˜¯é‡æ–°è¿è¡Œä¸Šæ¬¡è¾“入的命令,但将命令ä¸çš„å—符串替æ¢ä¸ºå¦ä¸€ä¸ªçš„简写,
默认是 `^'。å¯é€‰çš„第三个å—符是指示如果作为一个è¯çš„开始,那么
一行ä¸å‰©ä½™å—符是注释。通常这个å—符是 `#'ã€‚åŽ†å²æ³¨é‡Šå—符使得
对一行ä¸å‰©ä½™å—ç¬¦åœ¨åŽ†å²æ›¿æ¢ä¸è¢«è·³è¿‡ã€‚它ä¸ä¸€å®šä½¿ shell 解释器将
这一行的剩余部分当作注释。
Arrays
Bash æä¾›äº†ä¸€ç»´æ•°ç»„å˜é‡ã€‚任何å˜é‡éƒ½å¯ä»¥ä½œä¸ºä¸€ä¸ªæ•°ç»„;内建命令 declare
å¯ä»¥æ˜¾å¼åœ°å®šä¹‰æ•°ç»„ã€‚æ•°ç»„çš„å¤§å°æ²¡æœ‰ä¸Šé™ï¼Œä¹Ÿæ²¡æœ‰é™åˆ¶åœ¨è¿žç»å¯¹æˆå‘˜å¼•用和
èµ‹å€¼æ—¶æœ‰ä»€ä¹ˆè¦æ±‚ã€‚æ•°ç»„ä»¥æ•´æ•°ä¸ºä¸‹æ ‡ï¼Œä»Ž 0 开始。
如果å˜é‡èµ‹å€¼æ—¶ä½¿ç”¨è¯æ³• name[subscript]=value, 那么就会自动创建数组。
subscript 被当作一个算术表达å¼ï¼Œç»“果必须是大于ç‰äºŽ 0
çš„å€¼ã€‚è¦æ˜¾å¼åœ°å®šä¹‰ä¸€ä¸ªæ•°ç»„,使用 declare -a name (å‚è§ä¸‹é¢çš„ shell
(SHELL BUILTIN COMMANDS) ç« èŠ‚)。也å¯ä»¥ç”¨ declare -a name[sub-
script] 这时 subscript 被忽略。数组å˜é‡çš„属性å¯ä»¥ç”¨å†…建命令 declare å’Œ
readonly æ¥æŒ‡å®šã€‚æ¯ä¸ªå±žæ€§å¯¹äºŽæ‰€æœ‰æ•°ç»„å…ƒç´ éƒ½æœ‰æ•ˆã€‚
数组赋值å¯ä»¥ä½¿ç”¨å¤åˆèµ‹å€¼çš„æ–¹å¼ï¼Œå½¢å¼æ˜¯ name=(value1 ... val-
uen),这里æ¯ä¸ª value 的形å¼éƒ½æ˜¯ [subscript]=string。string
必须出现。如果出现了å¯é€‰çš„æ‹¬å·å’Œä¸‹æ ‡ï¼Œå°†ä¸ºè¿™ä¸ªä¸‹æ ‡èµ‹å€¼ï¼Œå¦åˆ™
è¢«èµ‹å€¼çš„å…ƒç´ çš„ä¸‹æ ‡æ˜¯è¯å¥ä¸ä¸Šä¸€æ¬¡èµ‹å€¼çš„ä¸‹æ ‡åŠ ä¸€ã€‚ä¸‹æ ‡ä»Ž 0 开始。
è¿™ä¸ªè¯æ³•也被内建命令 declare 所接å—。å•ç‹¬çš„æ•°ç»„å…ƒç´ å¯ä»¥ç”¨ä¸Šé¢ä»‹ç»çš„è¯æ³•
name[subscript]=value æ¥èµ‹å€¼ã€‚
æ•°ç»„çš„ä»»ä½•å…ƒç´ éƒ½å¯ä»¥ç”¨ ${name[subscript]} æ¥å¼•用。
èŠ±æ‹¬å·æ˜¯å¿…须的,以é¿å…和路径扩展冲çªã€‚如果 subscript 是 @ 或是
*,它扩展为 name 的所有æˆå‘˜ã€‚
这两ç§ä¸‹æ ‡åªæœ‰åœ¨åŒå¼•å·ä¸æ‰ä¸åŒã€‚在åŒå¼•å·ä¸ï¼Œ${name[*]} 扩展为一个è¯ï¼Œ
由所有数组æˆå‘˜çš„值组æˆï¼Œç”¨ç‰¹æ®Šå˜é‡ IFS 的第一个å—符分隔;${name[@]} å°†
name çš„æ¯ä¸ªæˆå‘˜æ‰©å±•为一个è¯ã€‚ 如果数组没有æˆå‘˜ï¼Œ${name[@]}
扩展为空串。这ç§ä¸åŒç±»ä¼¼äºŽç‰¹æ®Šå‚æ•° * å’Œ @ 的扩展 (å‚è§ä¸Šé¢çš„ Special
Parameters 段è½)。${#name[subscript]} 扩展为 ${name[subscript]}
的长度。如果 subscript 是 * 或者是
@,扩展结果是数组ä¸å…ƒç´ çš„ä¸ªæ•°ã€‚å¼•ç”¨æ²¡æœ‰ä¸‹æ ‡æ•°ç»„å˜é‡ç‰ä»·äºŽ å¼•ç”¨å…ƒç´ 0。
内建命令 unset ç”¨äºŽé”€æ¯æ•°ç»„。unset name[subscript] 将销æ¯ä¸‹æ ‡æ˜¯ sub-
script çš„å…ƒç´ ã€‚ unset name, 这里 name 是一个数组,或者 unset name[sub-
script], 这里 subscript 是 * 或者是 @ï¼Œå°†é”€æ¯æ•´ä¸ªæ•°ç»„。
内建命令 declare, local, å’Œ readonly éƒ½èƒ½æŽ¥å— -a
选项,从而指定一个数组。内建命令 read å¯ä»¥æŽ¥å— -a
é€‰é¡¹ï¼Œä»Žæ ‡å‡†è¾“å…¥è¯»å…¥ä¸€åˆ—è¯æ¥ä¸ºæ•°ç»„赋值。内建命令 set å’Œ declare
使用一ç§å¯ä»¥é‡ç”¨ä¸ºè¾“å…¥çš„æ ¼å¼æ¥æ˜¾ç¤ºæ•°ç»„å…ƒç´ ã€‚
(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, 但是并ä¸éœ€è¦å˜åœ¨ç›¸åº”的文件。 èŠ±æ‹¬å·æ‰©å±•çš„æ¨¡å¼æ˜¯ä¸€ä¸ªå¯é€‰çš„
preamble(å‰å¯¼å—符),
åŽé¢è·Ÿç€ä¸€ç³»åˆ—逗å·åˆ†éš”çš„å—符串,包å«åœ¨ä¸€å¯¹èŠ±æ‹¬å·ä¸ï¼Œ å†åŽé¢æ˜¯ä¸€ä¸ªå¯é€‰çš„
postscript(附言)。
å‰å¯¼è¢«æ·»åŠ åˆ°èŠ±æ‹¬å·ä¸çš„æ¯ä¸ªå—符串å‰é¢ï¼Œé™„è¨€è¢«é™„åŠ åˆ°æ¯ä¸ªç»“æžœå—符串之åŽï¼Œ
从左到å³è¿›è¡Œæ‰©å±•。
èŠ±æ‹¬å·æ‰©å±•å¯ä»¥åµŒå¥—。扩展å—符串的结果没有排åºï¼›è€Œæ˜¯ä¿ç•™äº†ä»Žå·¦åˆ°å³çš„顺åºã€‚
例如, a{d,c,b}e 扩展为 `ade ace abe'。
èŠ±æ‹¬å·æ‰©å±•是在任何其他扩展之å‰è¿›è¡Œçš„,任何对其他扩展有特殊æ„义的å—符
都ä¿ç•™åœ¨ç»“æžœä¸ã€‚å®ƒæ˜¯ä¸¥æ ¼å—é¢ä¸Šçš„。 Bash
ä¸ä¼šå¯¹æ‰©å±•的上下文或花括å·ä¸çš„æ–‡æœ¬åšä»»ä½•è¯ä¹‰ä¸Šçš„解释。
æ£ç¡®çš„èŠ±æ‹¬å·æ‰©å±•å¿…é¡»åŒ…å«æ²¡æœ‰å¼•用的左括å·å’Œå³æ‹¬å·ï¼Œä»¥åŠè‡³å°‘一个没有
引用的逗å·ã€‚任何䏿£ç¡®çš„表达å¼éƒ½ä¸ä¼šè¢«æ”¹å˜ã€‚å¯ä»¥ç”¨åæ–œæ æ¥å¼•用 { 或 ,
æ¥é˜»æ¢å°†å®ƒä»¬è¯†åˆ«ä¸ºèŠ±æ‹¬å·è¡¨è¾¾å¼çš„一部分。 为了é¿å…ä¸Žå‚æ•°æ‰©å±•冲çªï¼Œå—符串
${ ä¸è¢«è®¤ä¸ºæœ‰æ•ˆçš„组åˆã€‚
è¿™ç§ç»“构通常用æ¥ç®€å†™å—符串的公共å‰ç¼€è¿œæ¯”上例ä¸ä¸ºé•¿çš„æƒ…况,例如:
mkdir /usr/local/src/bash/{old,new,dist,bugs}
或者:
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
èŠ±æ‹¬å·æ‰©å±•导致了与历å²ç‰ˆæœ¬çš„ sh
的一点ä¸å…¼å®¹ã€‚åœ¨å·¦æ‹¬å·æˆ–峿‹¬å·ä½œä¸ºè¯çš„一部分出现时, sh
ä¸ä¼šå¯¹å®ƒä»¬è¿›è¡Œç‰¹æ®Šå¤„ç†ï¼Œä¼šåœ¨è¾“出ä¸ä¿ç•™å®ƒä»¬ã€‚ Bash
将括å·ä»ŽèŠ±æ‹¬å·æ‰©å±•结果的è¯ä¸åˆ é™¤ã€‚ä¾‹å¦‚ï¼Œå‘ sh 输入 file{1,2}
会导致ä¸å˜çš„è¾“å‡ºã€‚åŒæ ·çš„输入在 bash 进行扩展之åŽï¼Œä¼šè¾“出 file1 file2 .
如果需è¦åŒ sh ä¸¥æ ¼åœ°ä¿æŒå…¼å®¹ï¼Œéœ€è¦åœ¨å¯åЍ bash 的时候使用 +B
选项,或者使用 set å‘½ä»¤åŠ ä¸Š +B 选项æ¥ç¦ç”¨èŠ±æ‹¬å·æ‰©å±• (å‚è§ä¸‹é¢çš„ shell
(SHELL BUILTIN COMMANDS) ç« èŠ‚)。
Tilde Expansion
如果一个è¯ä»¥æ²¡æœ‰å¼•用的波浪线å—符 (`~') 开始,所有
在第一个没有引用的斜线 (`/') 之å‰çš„å—符 (或者是这个è¯çš„æ‰€æœ‰å—符,
如果没有没引用的斜线的è¯) 都被认为是 tilde-prefix(波浪线å‰ç¼€)。 如果
tilde-prefix 䏿²¡æœ‰è¢«å¼•用的å—符,那么波浪线之åŽçš„å—符串 被认为是 login
name(登录å)ã€‚å¦‚æžœç™»å½•åæ˜¯ç©ºå—符串,波浪线将 被替æ¢ä¸º shell 傿•° HOME
的值。如果没有定义 HOM, 将替æ¢ä¸ºæ‰§è¡Œæ¤ shell
的用户的个人目录。å¦åˆ™ï¼Œtilde-prefix 被替æ¢ä¸º
与指定登录å相è”系的个人目录。
如果 tilde-prefix 是 `~+',将使用 shell å˜é‡ PWD çš„å€¼æ¥æ›¿æ¢ã€‚如果
tilde-prefix 是 `~-',并且设置了 shell å˜é‡ OLDPWD,
将使用这个å˜é‡å€¼æ¥æ›¿æ¢ã€‚如果在 tilde-prefix ä¸ï¼Œæ³¢æµªçº¿ä¹‹åŽçš„å—符串
ç”±ä¸€ä¸ªæ•°å— N 组æˆï¼Œå‰ç¼€å¯é€‰çš„ `+' 或者 `-',那么 tilde-prefix
将被替æ¢ä¸ºç›®å½•æ ˆä¸ç›¸åº”çš„å…ƒç´ ï¼Œå°±æ˜¯å°† tilde-prefix ä½œä¸ºå‚æ•°æ‰§è¡Œå†…建命令
dirs 显示的结果。如果 tilde-prefix
䏿³¢æµªçº¿ä¹‹åŽçš„å—符是一个数å—,没有å‰ç¼€ï¼Œ 那么就å‡å®šæœ‰ä¸€ä¸ª `+'。
如果登录åä¸åˆæ³•,或者波浪线扩展失败,这个è¯å°†ä¸ä¼šå˜åŒ–。
在å˜é‡èµ‹å€¼ä¸ï¼Œå¯¹äºŽ : 或 = 之åŽçš„å—ç¬¦ä¸²ä¼šç«‹å³æ£€æŸ¥æœªå¼•用的 tilde-prefix。
è¿™ç§æƒ…况下,ä»ç„¶ä¼šè¿›è¡Œæ³¢æµªçº¿æ‰©å±•ã€‚å› æ¤ï¼Œå¯ä»¥ä½¿ç”¨å¸¦æ³¢æµªçº¿çš„æ–‡ä»¶åæ¥ä¸º
PATH, MAILPATH, å’Œ CDPATH 赋值,shell 将赋予扩展之åŽçš„值。
Parameter Expansion
å—符 `$' å¼•å…¥äº†å‚æ•°æ‰©å±•,命令替æ¢å’Œç®—æœ¯æ‰©å±•ã€‚è¦æ‰©å±•çš„å‚æ•°å或符å·
å¯èƒ½åŒ…å«åœ¨èŠ±æ‹¬å·ä¸ï¼ŒèŠ±æ‹¬å·å¯é€‰çš„,但是å¯ä»¥ä½¿å¾—è¦æ‰©å±•çš„å˜é‡ä¸ä¼šä¸Žç´§éšå…¶åŽ
çš„å—符åˆå¹¶ï¼Œæˆä¸ºæ–°çš„å称。
使用花括å·çš„æ—¶å€™ï¼ŒåŒ¹é…çš„å³æ‹¬å·æ˜¯ç¬¬ä¸€ä¸ª `}'ï¼Œå¹¶ä¸”å®ƒæ²¡æœ‰è¢«åæ–œæ 引用
或包å«åœ¨ä¸€ä¸ªå¼•用的å—符串ä¸ï¼Œä¹Ÿæ²¡æœ‰åŒ…å«åœ¨ä¸€ä¸ªåµŒå…¥çš„算术扩展,命令替æ¢
æˆ–æ˜¯å‚æ•°æ‰©å±•ä¸ã€‚
${parameter}
被替æ¢ä¸º parameter 的值。如果 parameter
是一个ä½ç½®å‚数,并且数å—å¤šäºŽä¸€ä½æ—¶ï¼›æˆ–è€…å½“ç´§éš parameter
ä¹‹åŽæœ‰ä¸å±žäºŽå称一部分的å—ç¬¦æ—¶ï¼Œéƒ½å¿…é¡»åŠ ä¸ŠèŠ±æ‹¬å·ã€‚
如果 parameter 的第一个å—符是一个感å¹å·ï¼Œå°†å¼•进一层间接å˜é‡ã€‚ bash
使用以 parameter 的其余部分为åçš„å˜é‡çš„值作为å˜é‡çš„åç§°ï¼›
æŽ¥ä¸‹æ¥æ–°çš„å˜é‡è¢«æ‰©å±•,它的值用在éšåŽçš„æ›¿æ¢å½“ä¸ï¼Œè€Œä¸æ˜¯ä½¿ç”¨ parameter
自身的值。这也称为 indirect expansion(间接扩展). 例外情况是下é¢è®²åˆ°çš„
${!prefix*}。
下é¢çš„æ¯ç§æƒ…况ä¸ï¼Œword 都è¦ç«ŸÉ¡è®¼å‘ƒâ”±æ¢—问┱梗é’婊缓
算术扩展。如果ä¸è¿›è¡Œåå—符串扩展,bash 测试一个没有定义或值为空的
傿•°ï¼›å¿½ç•¥å†’å·çš„ç»“æžœæ˜¯åªæµ‹è¯•æœªå®šä¹‰çš„å‚æ•°ã€‚
${parameter:-word}
Use Default Values(使用默认值)。如果 parameter
未定义或值为空,将替æ¢ä¸º word 的扩展。å¦åˆ™ï¼Œå°†æ›¿æ¢ä¸º parameter
的值。
${parameter:=word}
Assign Default Values(赋默认值)。如果 parameter 未定义或值为空,
word 的扩展将赋予 parameter. parameter
的值将被替æ¢ã€‚ä½ç½®å‚æ•°å’Œç‰¹æ®Šå‚æ•°ä¸èƒ½ç”¨è¿™ç§æ–¹å¼èµ‹å€¼ã€‚
${parameter:?word}
Display Error if Null or
Unset(显示错误,如果未定义或值为空)。如果 parameter
未定义或值为空,word (或一æ¡ä¿¡æ¯ï¼Œå¦‚æžœ word ä¸å˜åœ¨)
çš„æ‰©å±•å°†å†™å…¥åˆ°æ ‡å‡†é”™è¯¯ï¼›shell å¦‚æžœä¸æ˜¯äº¤äº’的,则将退出。å¦åˆ™ï¼Œ
parameter 的值将被替æ¢ã€‚
${parameter:+word}
Use Alternate Value(使用å¯é€‰å€¼)。如果 parameter
未定义或éžç©ºï¼Œä¸ä¼šè¿›è¡Œæ›¿æ¢ï¼›å¦åˆ™å°†æ›¿æ¢ä¸º word 扩展åŽçš„值。
${parameter:offset}
${parameter:offset:length}
Substring Expansion(åå—符串扩展)。 扩展为parameter 的最多
length 个å—符,从 offset 指定的å—符开始。如果忽略了
length,扩展为 parameter çš„åå—符串, 从 offset
指定的å—符串开始。length å’Œ offset æ˜¯ç®—æœ¯è¡¨è¾¾å¼ (å‚è§ä¸‹é¢çš„
ARITHMETIC EVALUATION 值段è½)。 length 必须是一个大于ç‰äºŽ
0 的数值。如果 offset 求值结果å°äºŽ 0, 值将当作从 parameter
的值的末尾算起的åç§»é‡ã€‚如果 parameter 是 @,结果是 length
个ä½ç½®å‚数,从 offset 开始。 如果 parameter 是一个数组å,以 @
或 * 索引,结果是数组的 length 个æˆå‘˜ï¼Œä»Ž ${parameter[offset]}
开始。 åå—ç¬¦ä¸²çš„ä¸‹æ ‡æ˜¯ä»Ž 0 开始的,除éžä½¿ç”¨ä½ç½®å‚æ•°æ—¶ï¼Œä¸‹æ ‡ä»Ž 1
开始。
${!prefix*}
扩展为å称以 prefix 开始的å˜é‡å,以特殊å˜é‡ IFS
的第一个å—符分隔。
${#parameter}
替æ¢ä¸º parameter 的值的长度 (å—符数目)。如果 parameter 是 *
或者是 @, 替æ¢çš„值是ä½ç½®å‚数的个数。如果 parameter
是一个数组åï¼Œä¸‹æ ‡æ˜¯ * 或者是 @, 替æ¢çš„值是数组ä¸å…ƒç´ 的个数。
${parameter#word}
${parameter##word}
word 被扩展为一个模å¼ï¼Œå°±åƒè·¯å¾„扩展ä¸ä¸€æ ·ã€‚如果这个模å¼åŒ¹é…
parameter 的值的起始,那么扩展的结果是将 parameter
扩展åŽçš„值ä¸ï¼Œæœ€çŸçš„åŒ¹é… (``#'' 的情况) 或者最长的匹é…
(``##''的情况) åˆ é™¤çš„ç»“æžœã€‚å¦‚æžœ parameter 是 @ 或者是 *,
则模å¼åˆ 除æ“ä½œå°†ä¾æ¬¡æ–½ç”¨äºŽæ¯ä¸ªä½ç½®å‚æ•°ï¼Œæœ€åŽæ‰©å±•为结果的列表。如果
parameter 是一个数组å˜é‡ï¼Œä¸‹æ ‡æ˜¯ @ 或者是 *,
模å¼åˆ 除将便¬¡æ–½ç”¨äºŽæ•°ç»„ä¸çš„æ¯ä¸ªæˆå‘˜ï¼Œæœ€åŽæ‰©å±•为结果的列表。
${parameter%word}
${parameter%%word}
word 被扩展为一个模å¼ï¼Œå°±åƒè·¯å¾„扩展ä¸ä¸€æ ·ã€‚如果这个模å¼åŒ¹é…
parameter 扩展åŽçš„值的尾部,那么扩展的结果是将 parameter
扩展åŽçš„值ä¸ï¼Œæœ€çŸçš„åŒ¹é… (``%'' 的情况) 或者最长的匹é…
(``%%''的情况) åˆ é™¤çš„ç»“æžœã€‚å¦‚æžœ parameter 是 @ 或者是 *,
则模å¼åˆ 除æ“ä½œå°†ä¾æ¬¡æ–½ç”¨äºŽæ¯ä¸ªä½ç½®å‚æ•°ï¼Œæœ€åŽæ‰©å±•为结果的列表。如果
parameter 是一个数组å˜é‡ï¼Œä¸‹æ ‡æ˜¯ @ 或者是 *,
模å¼åˆ 除将便¬¡æ–½ç”¨äºŽæ•°ç»„ä¸çš„æ¯ä¸ªæˆå‘˜ï¼Œæœ€åŽæ‰©å±•为结果的列表。
${parameter/pattern/string}
${parameter//pattern/string}
patterm 被扩展为一个模å¼ï¼Œå°±åƒè·¯å¾„扩展ä¸ä¸€æ ·ã€‚parameter
è¢«æ‰©å±•ï¼Œå…¶å€¼ä¸æœ€é•¿çš„åŒ¹é… pattern 的内容被替æ¢ä¸º string。
在第一ç§å½¢å¼ä¸ï¼Œåªæœ‰ç¬¬ä¸€ä¸ªåŒ¹é…被替æ¢ã€‚第二ç§å½¢å¼ä½¿å¾— pattern
䏿‰€æœ‰åŒ¹é…都被替æ¢ä¸º string。 如果 pattern 以 # 开始,它必须匹é…
parameter æ‰©å±•åŽ å€¼çš„é¦–éƒ¨ã€‚å¦‚æžœ pattern 以 % 开始,它必须匹é…
parameter 扩展åŽå€¼çš„尾部。如果 string 是空值,pattern
的匹é…éƒ½å°†è¢«åˆ é™¤ï¼Œ pattern 之åŽçš„ / 将被忽略。如果 parameter 是
@ 或者是 *,
åˆ™æ›¿æ¢æ“ä½œå°†ä¾æ¬¡æ–½ç”¨äºŽæ¯ä¸ªä½ç½®å‚æ•°ï¼Œæœ€åŽæ‰©å±•为结果的列表。如果
parameter 是一个数组å˜é‡ï¼Œä¸‹æ ‡æ˜¯ @ 或者是 *,
模å¼åˆ 除将便¬¡æ–½ç”¨äºŽæ•°ç»„ä¸çš„æ¯ä¸ªæˆå‘˜ï¼Œæœ€åŽæ‰©å±•为结果的列表。
Command Substitution
å‘½ä»¤æ›¿æ¢ (Command substitution) å…许以命令的输出替æ¢å‘½ä»¤å。有
两ç§å½¢å¼ï¼š
$(command)
还有
`command`
Bash 进行扩展的æ¥éª¤æ˜¯æ‰§è¡Œ com-
mandï¼Œä»¥å®ƒçš„æ ‡å‡†è¾“å‡ºæ›¿æ¢å®ƒï¼Œå¹¶ä¸”将所有åŽç»çš„
æ–°è¡Œç¬¦åˆ é™¤ã€‚å†…åµŒçš„æ–°è¡Œç¬¦ä¸ä¼šåˆ 除,但是它们å¯èƒ½ä¼šåœ¨è¯çš„æ‹†åˆ†ä¸è¢«åˆ 除。
å‘½ä»¤æ›¿æ¢ $(cat file) å¯ä»¥ç”¨ç‰ä»·ä½†æ˜¯æ›´å¿«çš„æ–¹æ³• $(< file) 代替。
当使用旧å¼çš„åå¼•å· ("``") 替æ¢å½¢å¼æ—¶ï¼Œåæ–œæ åªæœ‰å…¶å—颿„ä¹‰ï¼Œé™¤éž åŽé¢æ˜¯
$, `, 或者是 \. 第一个å‰é¢æ²¡æœ‰åæ–œæ çš„å引å·å°†ç»“æŸå‘½ä»¤æ›¿æ¢ã€‚当使用
$(command) 形弿—¶ï¼Œæ‹¬å·ä¸æ‰€æœ‰å—符组æˆäº†æ•´ä¸ªå‘½ä»¤ï¼›æ²¡æœ‰è¢«ç‰¹æ®Šå¤„ç†çš„å—符。
命令替æ¢å¯ä»¥åµŒå¥—。è¦åœ¨ä½¿ç”¨å引å·å½¢å¼æ—¶åµŒå¥—,å¯ä»¥ç”¨åæ–œæ æ¥è½¬ä¹‰å†…层的
å引å·ã€‚
如果替æ¢å‘生在åŒå¼•å·ä¹‹ä¸ï¼Œç»“果将ä¸è¿›è¡Œè¯çš„æ‹†åˆ†å’Œè·¯å¾„扩展。
Arithmetic Expansion
算术扩展å…许算术表达å¼çš„æ±‚值和结果的替æ¢ã€‚ç®—æœ¯æ‰©å±•çš„æ ¼å¼æ˜¯ï¼š
$((expression))
è¡¨è¾¾å¼ expression
被视为如åŒåœ¨åŒå¼•å·ä¹‹ä¸ä¸€æ ·ï¼Œä½†æ˜¯æ‹¬å·ä¸çš„åŒå¼•å·ä¸ä¼šè¢«ç‰¹æ®Šå¤„ç†ã€‚
表达å¼ä¸æ‰€æœ‰è¯éƒ½ç«Ÿçž¬é—®â”±æ¢—å€â”±æ¢—é’婊缓鸵玫纳境
算术替æ¢å¯ä»¥åµŒå¥—。
æ±‚å€¼æ ¹æ®ä¸‹é¢ 值 (ARITHMETIC EVALUATION)
ç« èŠ‚ä¸åˆ—å‡ºçš„è§„åˆ™è¿›è¡Œã€‚å¦‚æžœè¡¨è¾¾å¼ expression éžæ³•, bash
输出错误æç¤ºæ¶ˆæ¯ï¼Œä¸ä¼šè¿›è¡Œæ›¿æ¢ã€‚
Process Substitution
Process substitution (进程替æ¢) åªæœ‰åœ¨æ”¯æŒå‘½åç®¡é“ (FIFOs),
或者支æŒä½¿ç”¨ /dev/fd æ–¹å¼ä¸ºæ‰“开的文件命åçš„ç³»ç»Ÿä¸æ‰å¯ç”¨ã€‚ å®ƒçš„å½¢å¼æ˜¯
<(list) 或者是 >(list)。 进程 list è¿è¡Œæ—¶çš„输入或输出被连接到一个 FIFO
或者 /dev/fd
ä¸çš„æ–‡ä»¶ã€‚文件的åç§°ä½œä¸ºä¸€ä¸ªå‚æ•°è¢«ä¼ 递到当å‰å‘½ä»¤ï¼Œä½œä¸ºæ‰©å±•的结果。
如果使用 >(list) å½¢å¼ï¼Œå‘文件写入相当于为 list æä¾›è¾“入。如果使用
<(list) å½¢å¼ï¼Œå¯ä»¥è¯»ä½œä¸ºå‚æ•°ä¼ é€’ 的文件æ¥èŽ·å¾— list 的输出。
如果å¯èƒ½çš„è¯ï¼Œè¿›ç¨‹æ›¿æ¢æ˜¯ä¸Žå‚æ•°å’Œå˜é‡æ‰©å±•,命令替æ¢å’Œç®—æœ¯æ‰©å±•åŒæ—¶å‘生的。
Word Splitting
shell 检测ä¸åœ¨åŒå¼•å·å¼•用ä¸å‘ç”Ÿçš„å‚æ•°æ‰©å±•,命令替æ¢å’Œç®—术扩展的结果,
进行 word splitting(è¯çš„æ‹†åˆ†)。
shell å°† IFS
çš„æ¯ä¸ªå—ç¬¦éƒ½ä½œä¸ºå®šç•Œç¬¦ï¼Œæ ¹æ®è¿™äº›å—符æ¥å°†å…¶ä»–扩展的结果分æˆè¯ã€‚如果 IFS
没有定义,或者它的值是默认的 <space><tab><newline>, 那么 IFS
å—符的任何åºåˆ—都将作为分界之用。如果 IFS
的值是默认之外的值,那么è¯å¼€å¤´å’Œç»“尾的空白å—符 space å’Œ tab
都将被忽略,åªè¦ç©ºç™½å—符在 IFS 的值之内 (å³ï¼Œ IFS 包å«ç©ºç™½å—符)。
任何在 IFS 之ä¸ä½†æ˜¯ä¸æ˜¯ IFS 空白的å—符,以åŠä»»ä½•相邻的 IFS
空白å—ç¬¦ï¼Œå°†å—æ®µåˆ†éš”å¼€æ¥ã€‚ IFS 空白å—符的åºåˆ—也被作为分界符。如果 IFS
的值是空,ä¸ä¼šå‘生è¯çš„æ‹†åˆ†ã€‚
显å¼ç»™å‡ºçš„ç©ºå€¼å‚æ•° ("" 或 '') 将被ä¿ç•™ã€‚
éšå«çš„ç©ºå€¼å‚æ•°ï¼Œæ¥è‡ªäºŽç©ºå€¼çš„傿•°æ‰©å±•ï¼Œå¦‚æžœæ²¡æœ‰å¼•ç”¨åˆ™å°†è¢«åˆ é™¤ã€‚
å¦‚æžœç©ºå€¼çš„å‚æ•°åœ¨åŒå¼•å·å¼•ç”¨ä¸æ‰©å±•ï¼Œç»“æžœæ˜¯ç©ºå€¼çš„å‚æ•°ï¼Œå°†è¢«ä¿ç•™ã€‚
注æ„如果没有å‘生扩展,ä¸ä¼šè¿›è¡Œè¯çš„æ‹†åˆ†ã€‚
Pathname Expansion
è¯çš„æ‹†åˆ†ä¹‹åŽï¼Œé™¤éžè®¾ç½®è¿‡ -f 选项, bash æœç´¢æ¯ä¸ªè¯ï¼Œå¯»æ‰¾å—符 *, ?, å’Œ
[. 如果找到了其ä¸ä¹‹ä¸€ï¼Œé‚£ä¹ˆè¿™ä¸ªè¯è¢«å½“作一个 pattern(模å¼),
被替æ¢ä¸ºåŒ¹é…这个模å¼çš„æ–‡ä»¶å以嗿¯é¡ºåºæŽ’列的列表。如果没有找到匹é…的文件å,
并且 shell ç¦ç”¨äº† nullglob 选项,这个è¯å°†ä¸å‘生å˜åŒ–。如果设置了 null-
glob 选项并且没有找到匹é…,这个è¯å°†è¢«åˆ 除。如果å¯ç”¨äº† nocaseglob
é€‰é¡¹ï¼ŒåŒ¹é…æ—¶å°†ä¸è€ƒè™‘å—æ¯çš„大å°å†™ã€‚当模å¼ç”¨ä½œè·¯å¾„忉©å±•时,å—符 ``.''
如果在一个å称的开始或者紧éšä¸€ä¸ªæ–œæ 之åŽï¼Œé‚£ä¹ˆå®ƒå¿…须被显å¼åœ°åŒ¹é…,除éžè®¾ç½®äº†
dotglob shell
选项。当匹é…ä¸€ä¸ªè·¯å¾„åæ—¶ï¼Œæ–œæ 符必须被显å¼åœ°åŒ¹é…。其他情况下,å—符
``.'' ä¸ä¼šè¢«ç‰¹æ®Šå¯¹å¾…。å‚è§ä¸‹é¢çš„ shell (SHELL BUILTIN COM-
MANDS) ä¸å¯¹ shopt 的介ç»ï¼Œå…¶ä¸æœ‰ shell 选项 nocaseglob, nullglob, å’Œ
dotglob çš„æè¿°ã€‚
环境å˜é‡ GLOBIGNORE å¯ä»¥ç”¨æ¥é™åˆ¶åŒ¹é… pattern 的文件å集åˆã€‚如果设置了
GLOBIGNOR, æ¯ä¸ªåŒ¹é…的文件åå¦‚æžœåŒ¹é… GLOBIGNORE
ä¸ä»»ä½•一个模å¼çš„è¯å°†ä»ŽåŒ¹é…的列表ä¸åˆ 除。文件å ``.'' å’Œ ``..''
总是被忽略,å³ä½¿è®¾ç½®äº† GLOBIGNOR。但是,设置 GLOBIGNORE å’Œå¯ç”¨ shell
选项 dotglob 效果是相åŒçš„ï¼Œå› æ¤æ‰€æœ‰å…¶ä»–以 ``.''
开头的文件å将被匹é…。è¦å¾—到岳å¹ç”·å½¢ (忽略所有以 ``.''
开头的文件å),å¯ä»¥å°† ``.*'' æ·»åŠ ä¸º GLOBIGNORE 的模å¼ä¹‹ä¸€ã€‚选项 dot-
glob 被ç¦ç”¨ï¼Œå¦‚æžœ GLOBIGNORE 没有定义时。
Pattern Matching
任何模å¼ä¸å‡ºçŽ°çš„å—ç¬¦ï¼Œé™¤äº†ä¸‹é¢æè¿°çš„ç‰¹æ®Šæ¨¡å¼å—符外,都匹é…它本身。
模å¼ä¸ä¸èƒ½å‡ºçް NUL å—符。如果è¦åŒ¹é…å—é¢ä¸Šçš„特殊模å¼å—符,它必须被引用。
特殊模å¼å—符有下述æ„义:
* 匹é…任何å—符串包å«ç©ºä¸²ã€‚
? 匹é…任何å•个å—符。
[...] åŒ¹é…æ‰€åŒ…å«çš„任何å—符之一。用一个连å—符 (`-')
分隔的一对å—ç¬¦æ„æ€æ˜¯ä¸€ä¸ª range expression (范围表达å¼)ï¼›
任何排在它们之间的å—符,包å«å®ƒä»¬ï¼Œéƒ½è¢«åŒ¹é…。
排åºä½¿ç”¨å½“å‰è¯è¨€çŽ¯å¢ƒçš„å—符顺åºå’Œå—符集。如果 [
之åŽçš„第一个å—符是一个 ! 或是一个 ^
那么任何ä¸åŒ…å«åœ¨å†…çš„å—符将被匹é…。范围表达å¼ä¸å—ç¬¦çš„é¡ºåºæ˜¯ç”±å½“å‰è¯è¨€çŽ¯å¢ƒ
和环境å˜é‡ LC_COLLATE 的值 (如果设置了的è¯) 决定的。一个 -
åªæœ‰ä½œä¸ºé›†åˆä¸ç¬¬ä¸€ä¸ªæˆ–最åŽä¸€ä¸ªå—符时æ‰èƒ½è¢«åŒ¹é…。一个 ]
åªæœ‰æ˜¯é›†åˆä¸ç¬¬ä¸€ä¸ªå—符时æ‰èƒ½è¢«åŒ¹é…。
在 [ å’Œ ] ä¸ï¼Œcharacter classes (å—符类) å¯ä»¥ç”¨ [:class:]
è¿™æ ·çš„è¯æ³•æ¥æŒ‡å®šï¼Œè¿™é‡Œ class 是在 POSIX.2
æ ‡å‡†ä¸å®šä¹‰çš„下列类å之一:
alnum alpha ascii blank cntrl digit graph lower print punct
space upper word xdigit
一个å—符类匹é…任何属于这一类的å—符。word
å—符类匹é…å—æ¯ï¼Œæ•°å—å’Œå—符 _。
在 [ å’Œ ] ä¸ï¼Œå¯ä»¥ç”¨ [=c=] è¿™æ ·çš„è¯æ³•æ¥æŒ‡å®š equivalence class
(ç‰ä»·ç±»)。它匹é…与å—符 c 有相åŒå½’å¹¶æƒå€¼ (collation
weightï¼Œç”±å½“å‰ è¯è¨€çŽ¯å¢ƒå®šä¹‰) çš„å—符。
在 [ å’Œ ] ä¸ï¼Œè¯æ³• [.symbol.] 匹é…å½’å¹¶ç¬¦å· (collating symbol)
symbol。
如果使用内建命令 shopt å¯ç”¨äº† shell 选项 extglob,
将识别å¦å¤–å‡ ç§æ¨¡å¼åŒ¹é…æ“作符。下é¢çš„æè¿°ä¸ï¼Œpattern-list 是一个
或多个模å¼ä»¥ | 分隔的列表。å¤åˆçš„æ¨¡å¼å¯ä»¥ä½¿ç”¨ä¸€ä¸ªæˆ–多个下列的
忍¡å¼æž„é€ å‡ºæ¥ï¼š
?(pattern-list)
åŒ¹é…æ‰€ç»™æ¨¡å¼é›¶æ¬¡æˆ–一次出现
*(pattern-list)
åŒ¹é…æ‰€ç»™æ¨¡å¼é›¶æ¬¡æˆ–多次出现
+(pattern-list)
åŒ¹é…æ‰€ç»™æ¨¡å¼ä¸€æ¬¡æˆ–多次出现
@(pattern-list)
å‡†ç¡®åŒ¹é…æ‰€ç»™æ¨¡å¼ä¹‹ä¸€
!(pattern-list)
ä»»ä½•é™¤äº†åŒ¹é…æ‰€ç»™æ¨¡å¼ä¹‹ä¸€çš„å—串
Quote Removal
竟懊娴ç¦â”±æ€ªèž…å½¢åŒ†çŽ«æ·–å€ \, ', 以åŠå¹¶éžä¸Šè¿°æ‰©å±•结果的å—符 "
éƒ½è¢«åˆ é™¤ã€‚
(REDIRECTION)
在命令执行å‰ï¼Œå®ƒçš„输入和输出å¯èƒ½è¢« redirected ( )ä½¿ç”¨ä¸€ç§ shell
å¯ä»¥è§£é‡Šçš„特殊记法。é‡å®šå‘也å¯ä»¥ç”¨äºŽä¸ºå½“å‰ shell 执行环境
æ‰“å¼€å’Œå…³é—æ–‡ä»¶ã€‚下列é‡å®šå‘æ“作符å¯ä»¥å‰ç½®æˆ–者放在 simple command
( ) 之ä¸çš„任何ä½ç½®ï¼Œæˆ–者放在 command
之åŽã€‚é‡å®šå‘是以出现的顺åºè¿›è¡Œå¤„ç†çš„,从左到å³ã€‚
下列æè¿°ä¸ï¼Œå¦‚果文件æè¿°ç¬¦è¢«å¿½ç•¥ï¼Œå¹¶ä¸”第一个é‡å®šå‘æ“作符是 <,
那么é‡å®šå‘æŒ‡çš„æ˜¯æ ‡å‡†è¾“å…¥ (文件æè¿°ç¬¦æ˜¯
0)。如果é‡å®šå‘æ“作符的第一个å—符是 >, 那么é‡å®šå‘æŒ‡çš„æ˜¯æ ‡å‡†è¾“å‡º
(文件æè¿°ç¬¦æ˜¯ 1)。
下列æè¿°ä¸ï¼Œé‡å®šå‘æ“作符之åŽçš„è¯å¦‚果没有特殊说明,都è¦ç«Ÿ brace expan-
sion, tilde expansion, parameter expansion, command substitution,
arithmetic expansion, quote removal, pathname expansion, 还有 word
splitting。如果扩展为多于一个è¯ï¼Œ bash 将报错。
注æ„é‡å®šå‘的顺åºéžå¸¸é‡è¦ã€‚例如,命令
ls > dirlist 2>&1
å°†æ ‡å‡†è¾“å‡ºå’Œæ ‡å‡†é”™è¯¯é‡å®šå‘到文件 dirlist, 而命令
ls 2>&1 > dirlist
åªä¼šå°†æ ‡å‡†è¾“出é‡å®šå‘到文件 dirlist, å› ä¸ºåœ¨æ ‡å‡†è¾“å‡ºè¢«é‡å®šå‘到文件
dirlist ä¸ä¹‹å‰ï¼Œæ ‡å‡†é”™è¯¯è¢«å¤åˆ¶ä¸ºæ ‡å‡†è¾“出。
一些文件å在é‡å®šå‘ä¸è¢« bash 特殊处ç†ï¼Œå¦‚下表所示:
/dev/fd/fd
如果 fd æ˜¯ä¸€ä¸ªåˆæ³•的整数,文件æè¿°ç¬¦ fd 将被å¤åˆ¶ã€‚
/dev/stdin
文件æè¿°ç¬¦ 0 被å¤åˆ¶ã€‚
/dev/stdout
文件æè¿°ç¬¦ 1 被å¤åˆ¶ã€‚
/dev/stderr
文件æè¿°ç¬¦ 2 被å¤åˆ¶ã€‚
/dev/tcp/host/port
如果 host æ˜¯ä¸€ä¸ªåˆæ³•çš„ä¸»æœºåæˆ– Internet 地å€ï¼Œå¹¶ä¸” port
是 一个整数端å£å·æˆ–æœåŠ¡å,bash 试图建立与相应的 socket
(套接å—) çš„ TCP 连接。
/dev/udp/host/port
如果 host æ˜¯ä¸€ä¸ªåˆæ³•çš„ä¸»æœºåæˆ– Internet 地å€ï¼Œå¹¶ä¸” port
是 一个整数端å£å·æˆ–æœåŠ¡å,bash 试图建立与相应的 socket
(套接å—) çš„ UDP 连接。
打开或创建文件错误将导致é‡å®šå‘出错。
Redirecting Input
é‡å®šå‘输入使得以 word 扩展结果为å的文件被打开并通过文件æè¿°ç¬¦ n
读å–,如果没有指定 n é‚£ä¹ˆå°±ä½œä¸ºæ ‡å‡†è¾“å…¥ (文件æè¿°ç¬¦ä¸º 0) 读å–。
é‡å®šå‘è¾“å…¥çš„ä¸€èˆ¬å½¢å¼æ˜¯ï¼š
[n]<word
Redirecting Output
é‡å®šå‘输出使得以 word 扩展结果为å的文件被打开并通过文件æè¿°ç¬¦ n
写入,如果没有指定 n é‚£ä¹ˆå°±ä½œä¸ºæ ‡å‡†è¾“å‡º (文件æè¿°ç¬¦ä¸º 1) 写入。
é‡å®šå‘çš„ä¸€èˆ¬å½¢å¼æ˜¯ï¼š
[n]>word
如果é‡å®šå‘æ“作符是 >, 并且å¯ç”¨äº†å†…建命令 set çš„ noclobber
选项,那么如果 word 扩展åŽå¾—到的文件åå˜åœ¨å¹¶ä¸”是一个普通的文件,
é‡å®šå‘将失败。如果é‡å®šå‘æ“作符是 >|, 或者é‡å®šå‘æ“作符是 >
并且没有å¯ç”¨å†…建命令 set çš„ noclobber 选项,那么å³ä½¿ word
得出的文件åå˜åœ¨ï¼Œä¹Ÿä¼šå°è¯•进行é‡å®šå‘。
Appending Redirected Output )
è¿™ç§æ–¹å¼çš„输出é‡å®šå‘使得以 word
扩展结果为å的文件被打开并通过文件æè¿°ç¬¦ n ä»Žå°¾éƒ¨æ·»åŠ ã€‚å¦‚æžœæ²¡æœ‰æŒ‡å®š n
å°±ä½¿ç”¨æ ‡å‡†è¾“å‡º (文件æè¿°ç¬¦ 1)。如果文件ä¸å˜åœ¨ï¼Œå®ƒå°†è¢«åˆ›å»ºã€‚
é‡å®šå‘çš„ä¸€èˆ¬å½¢å¼æ˜¯ï¼š
[n]>>word
Redirecting Standard Output and Standard Error
Bash å…许使用这ç§ç»“æž„å°†æ ‡å‡†è¾“å‡ºå’Œæ ‡å‡†é”™è¯¯ (文件æè¿°ç¬¦ 1 å’Œ 2)
é‡å®šå‘到以 word 扩展结果为å的文件ä¸ã€‚
有两ç§é‡å®šå‘æ ‡å‡†è¾“å‡º/æ ‡å‡†é”™è¯¯çš„å½¢å¼ï¼š
&>word
还有
>&word
两ç§å½¢å¼ä¸ï¼ŒæŽ¨è使用第一ç§ã€‚它与
>word 2>&1
在è¯ä¹‰ä¸Šç‰ä»·ã€‚
Here Documents
è¿™ç§é‡å®šå‘使得 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 ä¸çš„æ‰€æœ‰è¡Œéƒ½è¦ç«Ÿ
parameter expansion, command substitution, 和 arithmetic expansion。
在åŽä¸€ç§æƒ…况下,å—符åºåˆ— \<newline> 被忽略;必须用 \ æ¥å¼•用å—符 \, $,
和 `.
如果é‡å®šå‘æ“作符是 <<-, 那么所有å‰å¯¼çš„ tab å—符都被从输入行和包å«
delimiter 的行ä¸åˆ é™¤ã€‚è¿™æ ·ä½¿å¾— shell 脚本ä¸çš„ here-document
å¯ä»¥è¢«æ›´å¥½åœ°ç¼©è¿›ã€‚
Here Strings
here-document çš„å˜ç§ï¼Œå½¢å¼æ˜¯
<<<word
word 被扩展,æä¾›ç»™å‘½ä»¤ä½œä¸ºæ ‡å‡†è¾“入。
Duplicating File Descriptors )
é‡å®šå‘æ“作符
[n]<&word
用于å¤åˆ¶æ–‡ä»¶æè¿°ç¬¦ã€‚如果 word 扩展为一个或多个数å—, n
代表的文件æè¿°ç¬¦å°†æˆä¸ºé‚£ä¸ªæ–‡ä»¶æè¿°ç¬¦çš„å¤åˆ¶ã€‚如果 word
ä¸çš„æ•°å—并未指定一个被用于读å–的文件æè¿°ç¬¦ï¼Œå°†äº§ç”Ÿä¸€ä¸ªé‡å®šå‘错误。如果
word 扩展为 -, 文件æè¿°ç¬¦ n 将被关é—。如果没有指定 nå°†ä½¿ç”¨æ ‡å‡†è¾“å…¥
(文件æè¿°ç¬¦ 0)。
类似的,æ“作符
[n]>&word
用于å¤åˆ¶è¾“出文件æè¿°ç¬¦ã€‚如果没有指定 n_å°†ä½¿ç”¨æ ‡å‡†è¾“å‡º (文件æè¿°ç¬¦
1)。如果 word
ä¸çš„æ•°å—并未指定一个被用于输出的文件æè¿°ç¬¦ï¼Œå°†äº§ç”Ÿä¸€ä¸ªé‡å®šå‘错误。
特殊情况下,如果忽略了 n,并且 word å¹¶éžæ‰©å±•为一个或多个数å—,
æ ‡å‡†è¾“å‡ºå’Œæ ‡å‡†é”™è¯¯å°†è¢«é‡å®šå‘,和å‰é¢æè¿°çš„ä¸€æ ·ã€‚
Moving File Descriptors
é‡å®šå‘æ“作符
[n]<&digit-
将文件æè¿°ç¬¦ digit 移动为文件æè¿°ç¬¦ n, æˆ–æ ‡å‡†è¾“å…¥ (文件æè¿°ç¬¦
0),如果没有指定 n çš„è¯ã€‚ digit å¤åˆ¶ä¸º n 之åŽå°±è¢«å…³é—了。
类似的,é‡å®šå‘æ“作符
[n]>&digit-
将文件æè¿°ç¬¦ digit 移动为文件æè¿°ç¬¦ n, æˆ–æ ‡å‡†è¾“å‡º (文件æè¿°ç¬¦
1),如果没有指定 n çš„è¯ã€‚
Opening File Descriptors for Reading and Writing
é‡å®šå‘æ“作符
[n]<>word
使得以 word 扩展结果为å的文件被打开,通过文件æè¿°ç¬¦ n
进行读写。如果没有指定 n 那么就使用文件æè¿°ç¬¦
0。如果文件ä¸å˜åœ¨ï¼Œå®ƒå°†è¢«åˆ›å»ºã€‚
(ALIASES)
Aliases (åˆ«åæœºåˆ¶) å…è®¸å°†ä¸€ä¸ªè¯æ¥æ›¿æ¢ä¸ºä¸€ä¸ªå—符串,如果它是
一个简å•命令的第一个è¯çš„è¯ã€‚shell 记录ç€ä¸€ä¸ªåˆ«å列表,å¯ä»¥ä½¿ç”¨ 内建命令
alias å’Œ unalias æ¥å®šä¹‰å’Œå–消 (å‚è§ä¸‹é¢çš„ shell (SHELL BUILTIN
COMMANDS)
ç« èŠ‚)。æ¯ä¸ªå‘½ä»¤çš„第一个è¯ï¼Œå¦‚æžœæ²¡æœ‰å¼•ç”¨ï¼Œéƒ½å°†è¢«æ£€æŸ¥æ˜¯å¦æ˜¯ä¸€ä¸ªåˆ«å。
如果是,这个è¯å°†è¢«å®ƒæ‰€æŒ‡ä»£çš„æ–‡æœ¬æ›¿æ¢ã€‚别å和替æ¢çš„æ–‡æœ¬å¯ä»¥åŒ…å«ä»»ä½•有效
çš„ shell 输入,包å«ä¸Šé¢åˆ—出的 metacharacters ( )
,特殊情况是别åä¸ä¸èƒ½åŒ…å« =ã€‚æ›¿æ¢æ–‡æœ¬çš„第一个è¯ä¹Ÿè¢«æ£€æŸ¥æ˜¯å¦
是别å,但是如果它与被替æ¢çš„别å相åŒï¼Œå°±ä¸ä¼šå†æ›¿æ¢ç¬¬äºŒæ¬¡ã€‚è¿™æ„味ç€å¯ä»¥ç”¨
ls 作为 ls -F 的别å, bash
ä¸ä¼šé€’å½’åœ°å±•å¼€æ›¿æ¢æ–‡æœ¬ã€‚如果别å的最åŽä¸€ä¸ªå—符是 blank,
那么命令ä¸åˆ«å之åŽçš„下一个è¯ä¹Ÿå°†è¢«æ£€æŸ¥æ˜¯å¦èƒ½è¿›è¡Œåˆ«å展开。
别åå¯ä»¥ä½¿ç”¨ alias 命令æ¥åˆ›å»ºæˆ–列举出æ¥ï¼Œä½¿ç”¨ unalias 命令æ¥åˆ 除。
åœ¨æ›¿æ¢æ–‡æœ¬ä¸æ²¡æœ‰å‚数机制。如果需è¦å‚数,应当使用 shell 函数 (å‚è§ä¸‹é¢çš„
FUNCTIONS ) 段è½)。
如果 shell 䏿˜¯äº¤äº’的,别åå°†ä¸ä¼šå±•开,除éžä½¿ç”¨å†…建命令 shopt 设置了
expand_aliases 选项。
关于别å的定义和使用ä¸çš„规则比较混乱。 Bash
在执行一行ä¸çš„任何命令之å‰ï¼Œæ€»æ˜¯è¯»å…¥è‡³å°‘完整一行的输入。
别ååœ¨å‘½ä»¤è¢«è¯»å–æ—¶å±•å¼€ï¼Œè€Œä¸æ˜¯åœ¨æ‰§è¡Œçš„æ—¶å€™ã€‚å› æ¤ï¼Œåˆ«å定义如果
å’Œå¦ä¸€ä¸ªå‘½ä»¤åœ¨åŒä¸€è¡Œï¼Œé‚£ä¹ˆä¸ä¼šèµ·ä½œç”¨ï¼Œé™¤éžè¯»å…¥äº†ä¸‹ä¸€è¡Œã€‚
别å定义之åŽï¼ŒåŒä¸€è¡Œä¸çš„命令ä¸ä¼šå—新的别åå½±å“。这ç§è¡Œä¸º
在函数执行时å˜åœ¨äº‰è®®ï¼Œå› ä¸ºåˆ«åæ›¿æ¢æ˜¯åœ¨å‡½æ•°å®šä¹‰è¢«è¯»å–æ—¶å‘生的,
è€Œä¸æ˜¯å‡½æ•°è¢«æ‰§è¡Œçš„æ—¶å€™ï¼Œå› 为函数定义本身是一个å¤åˆå‘½ä»¤ã€‚结果,
在函数ä¸å®šä¹‰çš„别ååªæœ‰å½“这个函数执行完æ‰ä¼šç”Ÿæ•ˆã€‚为了ä¿é™©èµ·è§ï¼Œ
应当总是将别å定义放在å•独的一行,ä¸åœ¨å¤åˆå‘½ä»¤ä¸ä½¿ç”¨ alia。
ä¸ç®¡ä»€ä¹ˆæƒ…况下,别å都被 shell 函数超越 (be superseded)。
(FUNCTIONS)
一个 shell å‡½æ•°ï¼Œä»¥ä¸Šé¢ SHELL GRAMMAR
ä¸æè¿°çš„æ–¹æ³•å®šä¹‰ï¼Œä¿å˜ç€ä¸€ç³»åˆ—的命令,ç‰å¾…ç¨åŽæ‰§è¡Œã€‚ 当 shell
函数å作为一个简å•命令å使用时,这个函数åå…³è”的命令的åºåˆ—
è¢«æ‰§è¡Œã€‚å‡½æ•°åœ¨å½“å‰ shell çš„ä¸Šä¸‹æ–‡çŽ¯å¢ƒä¸æ‰§è¡Œï¼›ä¸ä¼šåˆ›å»ºæ–°çš„进程æ¥
解释它们 (这与 shell 脚本的执行形æˆäº†å¯¹æ¯”)。当执行函数时,函数
çš„å‚æ•°æˆä¸ºæ‰§è¡Œè¿‡ç¨‹ä¸çš„ä½ç½®å‚æ•° (positional parameters)ã€‚ç‰¹æ®Šå‚æ•° #
è¢«æ›´æ–°ä»¥åæ˜ 这个å˜åŒ–。ä½ç½®å‚æ•° 0 ä¸ä¼šæ”¹å˜ã€‚函数执行时, FUNCNAME
å˜é‡è¢«è®¾ç½®ä¸ºå‡½æ•°çš„å称。函数和它的调用者在 shell 执行环境的所有
å…¶ä»–æ–¹é¢éƒ½æ˜¯ä¸€æ ·çš„,特殊情况是 DEBUG 陷阱 (å‚è§ä¸‹é¢å¯¹å†…建函数 trap
çš„æè¿°ï¼Œåœ¨ shell (SHELL BUILTIN COMMANDS) ç« èŠ‚ä¸)
ä¸ä¼šè¢«ç»§æ‰¿ï¼Œé™¤éžå‡½æ•°è®¾ç½®äº† trace 属性 (å‚è§ä¸‹é¢å¯¹å†…建函数 declare
çš„æè¿°)。
函数ä¸çš„局部å˜é‡å¯ä»¥ä½¿ç”¨å†…建命令 local
æ¥å£°æ˜Žã€‚通常情况下,å˜é‡å’Œå®ƒä»¬çš„值在函数和它的调用者之间是共享的。
å¦‚æžœå‡½æ•°ä¸æ‰§è¡Œäº†å†…建命令 retur,
那么函数结æŸï¼Œæ‰§è¡Œä»Žå‡½æ•°è°ƒç”¨ä¹‹åŽçš„下一个命令开始。
函数结æŸåŽï¼Œä½ç½®å‚数的值以åŠç‰¹æ®Šå‚æ•° # 都将é‡ç½®ä¸ºå®ƒä»¬åœ¨å‡½æ•°æ‰§è¡Œå‰çš„值。
函数å和定义å¯ä»¥ä½¿ç”¨å†…建命令 declare 或 typeset åŠ ä¸Š -f
傿•°æ¥åˆ—出。如果在 declare 或 typeset 命令ä¸ä½¿ç”¨ -F
选项将åªåˆ—出函数å。函数å¯ä»¥ä½¿ç”¨å†…建命令 export åŠ ä¸Š -f
傿•°å¯¼å‡ºï¼Œä½¿å¾—å shell ä¸å®ƒä»¬è¢«è‡ªåŠ¨å®šä¹‰ã€‚
函数å¯ä»¥æ˜¯é€’归的。对于递归调用的次数没有硬性é™åˆ¶ã€‚
在一定的环境下,shell å…许进行算术表达å¼çš„æ±‚值 (å‚è§å†…建命令 let å’Œ
Arithmetic Expansion (算术表达å¼))。
æ±‚å€¼ä½¿ç”¨å›ºå®šå®½åº¦çš„æ•´æ•°ï¼Œä¸æ£€æŸ¥æ˜¯å¦æº¢å‡ºï¼Œä½†æ˜¯è¢«é›¶é™¤ä¼šè¢«æ•èŽ·ï¼Œæ ‡è®°ä¸ºé”™è¯¯ã€‚
æ“作数åŠå…¶ä¼˜å…ˆçº§å’Œèšåˆç¨‹åº¦ä¸Ž C è¯è¨€ä¸ç›¸åŒã€‚下列æ“作数的列表按照相åŒ
优先级的æ“作数其级别æ¥åˆ†ç»„ã€‚åˆ—å‡ºçš„çº§åˆ«é¡ºåºæ˜¯ä¼˜å…ˆçº§é€’å‡çš„。
id++ id--
å˜é‡è‡ªå¢ž/è‡ªå‡ (在åŽ)
++id --id
å˜é‡è‡ªå¢ž/è‡ªå‡ (在å‰)
- + (å•目的) å–è´Ÿ/å–æ£
! ~ 逻己臀è—》
** 乘幂
* / % 乘,除,å–ä½™
+ - åŠ ï¼Œå‡
<< >> å·¦/å³ä½ç§»
<= >= < >
比较
== != 相ç‰/ä¸ç‰
& ä½ä¸Ž (AND)
^ ä½å¼‚或 (exclusive OR)
| 使ˆ– (OR)
&& é€»åŠ (AND)
|| 逻蓟 (OR)
expr?expr:expr
æ¡ä»¶æ±‚值
= *= /= %= += -= <<= >>= &= ^= |=
赋值
expr1 , expr2
逗å·è¡¨è¾¾å¼
shell å˜é‡å¯ä»¥ä½œä¸ºæ“ä½œæ•°ï¼›åœ¨è¡¨è¾¾å¼æ±‚值之å‰ä¼šè¿›è¡Œå‚数扩展。
在表达å¼ä¸ï¼Œå¯ä»¥ç”¨å称引用 shell å˜é‡ï¼Œä¸å¿…ä½¿ç”¨å‚æ•°æ‰©å±•çš„è¯æ³•。
å˜é‡è¢«å¼•ç”¨æ—¶ï¼Œå…¶å€¼è¢«ä½œä¸ºç®—æœ¯è¡¨è¾¾å¼æ¥æ±‚值。 shell
å˜é‡ç”¨äºŽè¡¨è¾¾å¼ä¸æ—¶ï¼Œä¸å¿…å¯ç”¨æ•´æ•°å±žæ€§ã€‚
以 0 为å‰å¯¼çš„常é‡è¢«å½“作八进制数,以 0x 或 0X 作为å‰å¯¼è¡¨æ˜Žæ˜¯åå…进制。
其他情况下,数å—çš„å½¢å¼æ˜¯ [base#]n,这里 base 是一个 2 到 64
çš„å进制数值,作为数å—的基数,n æ˜¯åœ¨è¿™ä¸ªåŸºæ•°ä¸æ•°å—的值。 如果忽略了
base#,将以 10 为基数。大于 10 的数å—便¬¡ä»¥å°å†™å—æ¯ï¼Œ 大写嗿¯ï¼Œ@ å’Œ _
表示。如果 base å°äºŽæˆ–ç‰äºŽ 36,在表示 10 与 35 之间
çš„æ•°å—æ—¶å°å†™å—æ¯å’Œå¤§å†™å—æ¯å¯ä»¥äº’æ¢ã€‚
æ“ä½œç¬¦æ ¹æ®ä¼˜å…ˆçº§é¡ºåºè¿›è¡Œæ±‚值。圆括å·ä¸çš„å表达å¼è¢«æœ€å…ˆæ±‚值,å¯èƒ½ä¼š
超越上é¢çš„优先级规则。
æ¡ä»¶è¡¨è¾¾å¼ç”¨äºŽ [[ å¤åˆå‘½ä»¤ä»¥åŠå†…建命令 test å’Œ [ ä¸ï¼Œ
ç”¨æ¥æµ‹è¯•文件属性,进行å—符串和算术比较。表达å¼ä½¿ç”¨ä¸‹é¢çš„å•目或二进制æ“ä½œæž„é€ ã€‚
å¦‚æžœæŸæ“作的任何 file 傿•°çš„形弿˜¯ /dev/fd/n,那么将检查 文件æè¿°ç¬¦
nã€‚å¦‚æžœæŸæ“作的 file 傿•°æ˜¯ /dev/stdin, /dev/stdout 或者 /dev/stderr
之一,将分别检查文件æè¿°ç¬¦ 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 å˜åœ¨ä¸”是一个命åç®¡é“ (FIFO) 则为真。
-r file
如果 file å˜åœ¨ä¸”å¯è¯»åˆ™ä¸ºçœŸã€‚
-s file
如果 file å˜åœ¨ä¸”大å°å¤§äºŽé›¶åˆ™ä¸ºçœŸã€‚
-t fd 如果文件æè¿°ç¬¦ fd 是打开的且对应一个终端则为真。
-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 å˜åœ¨ä¸”上次读å–åŽè¢«ä¿®æ”¹è¿‡åˆ™ä¸ºçœŸã€‚
file1 -nt file2
如果 file1 比 file2 è¦æ–° (æ ¹æ®ä¿®æ”¹æ—¥æœŸ),或者 如果 file1 å˜åœ¨è€Œ
file2 ä¸å˜åœ¨ï¼Œåˆ™ä¸ºçœŸã€‚
file1 -ot file2
如果 file1 比 file2 更旧,或者 如果 file1 ä¸å˜åœ¨è€Œ file2
å˜åœ¨ï¼Œåˆ™ä¸ºçœŸã€‚
file1 -ef file2
如果 file1 å’Œ file2 指的是相åŒçš„设备和 inode å·åˆ™ä¸ºçœŸã€‚
-o optname
如果å¯ç”¨äº† shell 选项 optname 则为真。å‚è§ä¸‹é¢å¯¹å†…建命令 set çš„
-o 选项的æè¿°ä¸çš„选项列表。
-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 å¯ä»¥æ˜¯æ£/负整数。
当执行一个简å•命令时,shell 进行下列扩展,赋值和é‡å®šå‘,从左到å³ã€‚
1. è§£é‡Šå™¨æ ‡è®°ä¸ºä¸Žå˜é‡èµ‹å€¼ (在命令å之å‰çš„)
å’Œé‡å®šå‘有关的è¯è¢«ä¿å˜ç‰å¾…éšåŽå¤„ç†ã€‚
2. å¹¶éžå˜é‡èµ‹å€¼æˆ–é‡å®šå‘çš„è¯è¢«æ‰©å±•。如果扩展åŽä»ç„¶æœ‰è¯ä¿ç•™ä¸‹æ¥ï¼Œç¬¬ä¸€ä¸ªè¯è¢«
作为命令åï¼Œå…¶ä½™è¯æ˜¯å‚数。
3. é‡å®šå‘æŒ‰ç…§ä¸Šé¢ REDIRECTION ä¸è®²åˆ°çš„规则进行。
4. æ¯ä¸ªå˜é‡èµ‹å€¼ä¸ = 之åŽçš„æ–‡æœ¬åœ¨èµ‹äºˆå˜é‡ä¹‹å‰è¦ç«ŸÉ¡è®¼å‘ƒâ”±æ¢—
傿•°æ‰©å±•,命令替æ¢ï¼Œç®—æœ¯æ‰©å±•å’Œå¼•ç”¨åˆ é™¤ã€‚
如果没有得到命令å,å˜é‡èµ‹å€¼å½±å“å½“å‰ shell 环境。å¦åˆ™ï¼Œå˜é‡è¢«åŠ å…¥
被执行的命令的环境ä¸ï¼Œä¸å½±å“å½“å‰ shell 环境。如果任何赋值动作试图
为åªè¯»å˜é‡èµ‹å€¼ï¼Œå°†å¯¼è‡´å‡ºé”™ï¼Œå‘½ä»¤ä»¥éžé›¶çжæ€å€¼é€€å‡ºã€‚
如果没有得到命令å,é‡å®šå‘ä»ä¼šè¿›è¡Œï¼Œä½†æ˜¯ä¸å½±å“å½“å‰ shell 环境。
é‡å®šå‘出错将使命令以éžé›¶çжæ€å€¼é€€å‡ºã€‚
å¦‚æžœæ‰©å±•åŽæœ‰å‘½ä»¤åä¿ç•™ä¸‹æ¥ï¼Œé‚£ä¹ˆæ‰§è¡Œè¿‡ç¨‹å¦‚下所示。å¦åˆ™ï¼Œå‘½ä»¤é€€å‡ºã€‚
如果在任何扩展ä¸åŒ…å«å‘½ä»¤æ›¿æ¢ï¼Œé‚£ä¹ˆæ•´ä¸ªå‘½ä»¤çš„é€€å‡ºçŠ¶æ€æ˜¯æœ€åŽä¸€ä¸ªå‘½ä»¤
替æ¢çš„退出状æ€ã€‚如果没有进行命令替æ¢ï¼Œå‘½ä»¤ä»¥çжæ€é›¶é€€å‡ºã€‚
命令被拆分为è¯ä¹‹åŽï¼Œå¦‚果结果是一个简å•命令和å¯é€‰çš„傿•°åˆ—表,将执行
下é¢çš„æ“ä½œã€‚
如果命令å䏿²¡æœ‰æ–œæ ,shell 试图定ä½å‘½ä»¤ä½ç½®ã€‚如果å˜åœ¨åŒåçš„ shell
函数,函数将被执行,åƒä¸Šé¢ FUNCTIONS
ä¸è®²åˆ°çš„ä¸€æ ·ã€‚å¦‚æžœåç§°ä¸æ˜¯ä¸€ä¸ªå‡½æ•°ï¼Œshell 从 å†…å»ºå‘½ä»¤ä¸æœç´¢å®ƒã€‚如果找到
对应命令,它将被执行。
如果åç§°æ—¢ä¸æ˜¯ shell å‡½æ•°ä¹Ÿä¸æ˜¯ä¸€ä¸ªå†…å»ºå‘½ä»¤ï¼Œå¹¶ä¸”æ²¡æœ‰åŒ…å«æ–œæ , bash
æœç´¢ PATH çš„æ¯ä¸ªæˆå‘˜ï¼ŒæŸ¥æ‰¾å«æœ‰æ¤æ–‡ä»¶å (坿‰§è¡Œæ–‡ä»¶) 的目录。 Bash
使用散列表æ¥å‚¨å˜å¯æ‰§è¡Œæ–‡ä»¶çš„全路径 (å‚è§ä¸‹é¢çš„ shell (SHELL
BUILTIN COMMANDS) ä¸çš„ has。 åªæœ‰åœ¨æ•£åˆ—è¡¨ä¸æ²¡æœ‰æ‰¾åˆ°æ¤å‘½ä»¤ï¼Œæ‰å¯¹ PATH
进行完整的æœç´¢ã€‚如果æœç´¢ä¸æˆåŠŸï¼Œshell 输出错误消æ¯ï¼Œè¿”å›žé€€å‡ºçŠ¶æ€ 127。
如果æœç´¢æˆåŠŸï¼Œæˆ–è€…å‘½ä»¤ä¸åŒ…å«ä¸€ä¸ªæˆ–多个斜æ ,shell 在å•独的执行环境ä¸
执行这个程åºã€‚傿•° 0
被设置为所给åç§°ï¼›å‘½ä»¤çš„å…¶ä»–å‚æ•°è¢«è®¾ç½®ä¸ºæ‰€ç»™çš„傿•°ï¼Œ 如果有的è¯ã€‚
å¦‚æžœæ‰§è¡Œå¤±è´¥ï¼Œå› ä¸ºæ–‡ä»¶ä¸æ˜¯å¯æ‰§è¡Œæ ¼å¼ï¼Œå¹¶ä¸”æ¤æ–‡ä»¶ä¸æ˜¯ç›®å½•,就å‡å®šå®ƒæ˜¯
一个 shell script (脚本)ï¼Œä¸€ä¸ªåŒ…å« shell å‘½ä»¤çš„æ–‡ä»¶ã€‚æ¤æ—¶å°†åµåŒ– (spawn)
出一个å shell æ¥æ‰§è¡Œå®ƒã€‚å shell 釿–°åˆå§‹åŒ–è‡ªèº«ï¼Œæ•ˆæžœå°±å¥½åƒæ˜¯
执行了一个新的 shell æ¥å¤„ç†è„šæœ¬ä¸€æ ·ï¼Œä½†æ˜¯çˆ¶ shell ä¿å˜çš„命令ä½ç½®ä»ç„¶è¢«
ä¿ç•™ (å‚è§ä¸‹é¢çš„ shell (SHELL BUILTIN COMMANDS) ä¸çš„ hash。
å¦‚æžœç¨‹åºæ˜¯ä»¥ #!
开头的文件,那么第一行的其余部分指定了这个程åºçš„解释器。 shell
执行指定的解释器,如果æ“作系统ä¸ä¼šè‡ªè¡Œå¤„ç†è¿™ç§å¯æ‰§è¡Œæ–‡ä»¶æ ¼å¼çš„è¯ã€‚
è§£é‡Šå™¨çš„å‚æ•°ç”±ä¸‹é¢ä¸‰éƒ¨åˆ†ç»„æˆï¼šç¨‹åºç¬¬ä¸€è¡Œä¸è§£é‡Šå™¨å称之åŽçš„å¯é€‰çš„ä¸€ä¸ªå‚æ•°ï¼Œ
程åºçš„åç§°ï¼Œå‘½ä»¤è¡Œå‚æ•°ï¼Œå¦‚果有的è¯ã€‚
shell 有 execution environment (执行环境) 的概念,由下列内容组æˆï¼š
o shell å¯åŠ¨æ—¶ç»§æ‰¿çš„æ‰“å¼€çš„æ–‡ä»¶ï¼Œä¾‹å¦‚åœ¨å†…å»ºå‘½ä»¤ exec ä¸ä½¿ç”¨é‡å®šå‘
修改的结果
o 当å‰å·¥ä½œç›®å½•,使用 cd,pushd 或者 popd 设置,或是由 shell
在å¯åŠ¨æ—¶ç»§æ‰¿å¾—åˆ°
o æ–‡ä»¶åˆ›å»ºæ¨¡å¼æŽ©ç ,使用 umask 设置或是从 shell 的父进程ä¸ç»§æ‰¿å¾—到
o 当å‰é™·é˜±ï¼Œç”¨ trap 设置
o shell 傿•°ï¼Œä½¿ç”¨å˜é‡èµ‹å€¼æˆ–者 set
设置,或者是从父进程的环境ä¸ç»§æ‰¿å¾—到
o shell 函数,在执行ä¸å®šä¹‰æˆ–者是从父进程的环境ä¸ç»§æ‰¿å¾—到
o 设为å…许的选项,在执行时设置
(è¦ä¹ˆæ˜¯é»˜è®¤å…许的,è¦ä¹ˆæ˜¯å‘½ä»¤è¡Œç»™å‡ºçš„) 或者是 用 set 设置
o 用 shopt 设为å…许的选项
o 用 alias 定义的 shell 别å
o å„ç§è¿›ç¨‹å·ï¼ŒåŒ…å«åŽå°ä½œä¸šçš„进程å·ï¼Œ$$ çš„å€¼ï¼Œä»¥åŠ $PPID 的值
å½“å¹¶éž shell 函数或内置命令的简å•命令执行时,它在一个由下述内容组æˆçš„
å•独的执行环境ä¸å¯åŠ¨ã€‚é™¤éžå¦å¤–说明,值都是从 shell ä¸ç»§æ‰¿çš„。
o shell æ‰“å¼€çš„æ–‡ä»¶ï¼ŒåŠ ä¸Šå¯¹å‘½ä»¤ä½¿ç”¨é‡å®šå‘ä¿®æ”¹å’Œæ·»åŠ çš„æ–‡ä»¶
o 当å‰å·¥ä½œç›®å½•
o æ–‡ä»¶åˆ›å»ºæ¨¡å¼æŽ©ç
o æ ‡è®°ä¸ºå¯¼å‡º (export) çš„ shell
å˜é‡ï¼Œä»¥åŠä¼ 递到环境ä¸ä¸ºè¿™ä¸ªå‘½ä»¤å¯¼å‡ºçš„å˜é‡
o shell æ•æ‰çš„陷阱被é‡ç½®ä¸ºä»Ž shell 的父进程ä¸ç»§æ‰¿çš„值,shell
忽略的陷阱 也被忽略
在å•独的环境ä¸å¯åŠ¨çš„å‘½ä»¤ä¸èƒ½å½±å“ shell 的执行环境。
命令替æ¢å’Œå¼‚æ¥å‘½ä»¤éƒ½åœ¨å shell çŽ¯å¢ƒä¸æ‰§è¡Œã€‚å shell çŽ¯å¢ƒæ˜¯æ‚ shell
环境的赋值,但 shell æ•æ‰çš„陷阱被é‡ç½®ä¸º shell
å¯åŠ¨æ—¶ä»Žçˆ¶è¿›ç¨‹ä¸ç»§æ‰¿çš„值。 作为管é“ä¸€éƒ¨åˆ†æ¥æ‰§è¡Œçš„内建命令也在一个å
shell çŽ¯å¢ƒä¸æ‰§è¡Œã€‚对å shell 环境所作修改ä¸èƒ½å½±å“åˆ°æ‚ shell
的执行环境。
如果命令åŽé¢æ˜¯ & 并且没有å¯ç”¨ä½œä¸šæŽ§åˆ¶ï¼Œå‘½ä»¤çš„é»˜è®¤æ ‡å‡†è¾“å…¥å°†æ˜¯ç©ºæ–‡ä»¶
/dev/null。å¦åˆ™ï¼Œè¢«æ‰§è¡Œçš„命令从调用它的 shell ä¸ç»§æ‰¿è¢«é‡å®šå‘修改的
文件æè¿°ç¬¦ã€‚
(ENVIRONMENT)
å½“ä¸€ä¸ªç¨‹åºæ‰§è¡Œæ—¶ï¼Œå®ƒè¢«èµ‹äºˆä¸€ä¸ªå—符串数组,æˆä¸ºçŽ¯å¢ƒ environment。
它是一个 åç§°-值对 (name-value) çš„åˆ—è¡¨ï¼Œå½¢å¼æ˜¯ name=value.
shell æä¾›äº†å¤šç§æ“作环境的方法。å¯åŠ¨æ—¶ï¼Œshell
扫æè‡ªèº«çš„环境,为æ¯ä¸ªæ‰¾åˆ° çš„åå—åˆ›å»ºä¸€ä¸ªå‚æ•°ï¼Œè‡ªåŠ¨åœ°å°†å®ƒæ ‡è®°ä¸º export
(å‘å进程导出的)。被执行的命令继承了这个环境。 export å’Œ declare -x
命令å…è®¸å‚æ•°å’Œå‡½æ•°è¢«åŠ å…¥åˆ°çŽ¯å¢ƒä¸æˆ–从环境ä¸åˆ 除。如果环境ä¸å‚数的值
被修改,新值æˆä¸ºçŽ¯å¢ƒçš„ä¸€éƒ¨åˆ†ï¼Œæ›¿æ¢äº†æ—§å€¼ã€‚所有被执行的命令继承的环境
åŒ…å« shell çš„åˆå§‹çŽ¯å¢ƒ (å¯èƒ½å€¼è¢«ä¿®æ”¹è¿‡),å‡åŽ»è¢« unset
å‘½ä»¤åˆ é™¤çš„ï¼ŒåŠ ä¸Šé€šè¿‡ export å’Œ declare -x å‘½ä»¤æ·»åŠ çš„éƒ¨åˆ†ã€‚
å¯ä»¥åœ¨ä»»ä½• simple command
或函数的环境ä¸è®¾å®šæš‚æ—¶æœ‰æ•ˆçš„å‚æ•°ï¼Œåªè¦å°†å‚数赋值放在命令å‰é¢å°±å¯ä»¥äº†ï¼Œ
å‚è§ä¸Šé¢ PARAMETERS çš„æè¿°ã€‚这些赋值è¯å¥åªåœ¨è¿™ä¸ªå‘½ä»¤çš„çŽ¯å¢ƒä¸æœ‰æ•ˆã€‚
如果设置了内建命令 set 的 -k 选项, 礯
å˜é‡èµ‹å€¼éƒ½å°†æ”¾åˆ°å‘½ä»¤çš„环境ä¸ï¼Œä¸ä»…是在命令åå‰é¢çš„那些。
当 bash 执行一个外部命令时,å˜é‡ _
被设置为命令的文件全å,然åŽè¢«ä¼ 递到命令的环境之ä¸ã€‚
从 shell çš„è§’åº¦çœ‹ï¼Œä¸€ä¸ªå‘½ä»¤é€€å‡ºçŠ¶æ€æ˜¯ 0 æ„å‘³ç€æˆåŠŸé€€å‡ºã€‚ é€€å‡ºçŠ¶æ€æ˜¯ 0
表明æˆåŠŸã€‚éžé›¶çжæ€å€¼è¡¨æ˜Žå¤±è´¥ã€‚当命令收到 fatal signal N 退出时,bash
使用 128+N 作为它的退出状æ€ã€‚
如果没有找到命令,为执行它而创建的å进程返回 127。如果找到了命令但是
文件ä¸å¯æ‰§è¡Œï¼Œè¿”å›žçŠ¶æ€æ˜¯ 126。
如果命令由于扩展或é‡å®šå‘错误而失败,退出状æ€å¤§äºŽé›¶ã€‚
shell 内建命令如果æˆåŠŸè¿”å›ž 0(true),执行时出错则返回éžé›¶ (false)。
所有内建命令返回 2 æ¥æŒ‡ç¤ºä¸æ£ç¡®çš„用法。
Bash è‡ªèº«è¿”å›žæœ€åŽæ‰§è¡Œçš„命令的退出状æ€ï¼Œé™¤éžå‘ç”Ÿäº†è¯æ³•错误,
这时它返回éžé›¶å€¼ã€‚å‚è§ä¸‹é¢çš„内建命令 exit。
(SIGNALS)
如果 bash 是交互的,没有设定任何陷阱,它忽略 SIGTERM (è¿™æ · kill 0
ä¸ä¼šæ€æŽ‰äº¤äº’çš„ shell)。 SIGINT 被æ•èŽ·å¹¶å¤„ç† (从而使内建命令 wait
å¯ä»¥ä¸æ–)。在所有情况下, bash 忽略 SIGQUIT。 如果æ£åœ¨ä½¿ç”¨ä½œä¸šæŽ§åˆ¶ï¼Œ
bash 忽略 SIGTTIN, SIGTTOU, 和 SIGTSTP.
bash 开始的并行作业的信å·å¤„ç†å¥æŸ„都设置为 shell 从父进程ä¸ç»§æ‰¿
çš„å€¼ã€‚å¦‚æžœä¸æ˜¯æ£åœ¨ä½¿ç”¨ä½œä¸šæŽ§åˆ¶ï¼Œå¼‚æ¥å‘½ä»¤è¿˜å¿½ç•¥ SIGINT å’Œ SIGQUIT 。
作为命令替æ¢ç»“æžœè¿è¡Œçš„å‘½ä»¤å¿½ç•¥é”®ç›˜äº§ç”Ÿçš„ä½œä¸šæŽ§åˆ¶ä¿¡å· SIGTTIN, SIGTTOU,
和 SIGTSTP.
å¦‚æžœæ”¶åˆ°ä¿¡å· SIGHU, shell 默认退出。在退出å‰ï¼Œäº¤äº’çš„ shell
呿‰€æœ‰ä½œä¸šï¼Œè¿è¡Œçš„æˆ–åœæ¢çš„,å‘é€ SIGHUP ä¿¡å·ã€‚shell å‘åœæ¢çš„作业å‘出
SIGCONT ä¿¡å·æ¥ä¿è¯å®ƒä»¬ä¼šæ”¶åˆ° SIGHUP. è¦é˜»æ¢ shell
å‘特定的作业å‘é€ä¿¡å·ï¼Œåº”当使用内建命令 disown 将作业从作业表ä¸åˆ 除
(å‚è§ä¸‹é¢çš„ shell (SHELL BUILTIN COMMANDS) ç« èŠ‚) 或者使用 dis-
own -h æ¥æ ‡è®°ä¸ºä¸æŽ¥å— SIGHU。
如果使用 shopt 设置了 shell 选项 huponexi,在交互的登录 shell 退出时
bash 呿‰€æœ‰ä½œä¸šå‘出 SIGHUP ä¿¡å·ã€‚
当 bash ç‰å¾…å‘½ä»¤æ‰§è¡Œç»“æŸæ—¶ï¼Œå¦‚果收到已设置了陷阱的信å·ï¼Œé™·é˜± (trap)
å°†ä¸ä¼šæ‰§è¡Œï¼Œç›´åˆ°å‘½ä»¤ç»“æŸã€‚ 当 bash 通过内建命令 wait
ç‰å¾…异æ¥å‘½ä»¤æ—¶ï¼Œå¦‚果收到已设置 了陷阱的信å·ï¼Œå°†ä½¿å¾—内建命令 wait
ç«‹å³ä»¥å¤§äºŽ 128 的状æ€å€¼è¿”回。 接ç€ï¼Œé™·é˜±å°†ç«‹å³è¢«æ‰§è¡Œã€‚
Job control (作业控制) 指的是å¯ä»¥é€‰æ‹©åœæ¢ (suspend,挂起)
进程执行,并且 å¯ä»¥åœ¨ä¹‹åŽç»§ç» (resume,æ¢å¤)
执行的能力。用户一般在交互的人机界é¢
ä¸ä½¿ç”¨è¿™ç§åŠŸèƒ½ã€‚ç•Œé¢æ˜¯ç”±ç³»ç»Ÿçš„终端驱动和 bash å…±åŒæä¾›çš„ã€‚
shell å°†æ¯ä¸ªç®¡é“分é…给一个 (job)_
它ä¿å˜ä¸€ä¸ªå½“å‰è¿è¡Œçš„作业表,å¯ä»¥ç”¨ jobs 命令æ¥åˆ—出。当 bash
å¯åŠ¨ä¸€ä¸ªå¼‚æ¥çš„作业时 (backgroun )å®ƒè¾“å‡ºè¿™æ ·çš„ä¸€è¡Œï¼š
[1] 25647
è¡¨æ˜Žè¿™ä¸ªä½œä¸šçš„ä½œä¸šå·æ˜¯ 1,与作业相关连的管é“䏿œ€åŽä¸€ä¸ªè¿›ç¨‹çš„ 进程ID是
15647。管é“䏿‰€æœ‰è¿›ç¨‹éƒ½æ˜¯åŒä¸€ä¸ªä½œä¸šçš„æˆå‘˜ã€‚ Bash 使用 (job)
概念作为作业控制的基础。
为简化作业控制的用户界é¢çš„实现,æ“作系统负责管ç†â€œå½“å‰ç»ˆç«¯çš„进程组â€
(current terminal process group ID) 的概念。这个进程组的æˆå‘˜ (进程组 ID
是当å‰ç»ˆç«¯è¿›ç¨‹ç»„ ID 的进程) å¯ä»¥æ”¶åˆ°é”®ç›˜äº§ç”Ÿçš„ä¿¡å·ï¼Œä¾‹å¦‚ SIGINT.
这些进程被称为 foreground(å‰å°çš„)。 Background ( )
进程是那些进程组 ID 与终端ä¸åŒçš„进程;这些进程ä¸ä¼šæ”¶åˆ°é”®ç›˜äº§ç”Ÿçš„ä¿¡å·ã€‚
åªæœ‰å‰å°è¿›ç¨‹å¯ä»¥ä»Žç»ˆç«¯è¯»æˆ–å‘终端写。åŽå°è¿›ç¨‹è¯•图读/写终端时,将收到终端驱动程åºå‘é€çš„
SIGTTIN (SIGTTOU) ä¿¡å·ã€‚这个信å·å¦‚æžœæ²¡æœ‰åŠ ä»¥æ•æ‰ï¼Œå°†æŒ‚起这个进程。
如果 bash è¿è¡Œå…¶ä¸Šçš„æ“ä½œç³»ç»Ÿæ”¯æŒä½œä¸šæŽ§åˆ¶ï¼Œ bash
会包å«ä½¿ç”¨å®ƒçš„设施。在一个进程æ£åœ¨è¿è¡Œçš„æ—¶å€™é”®å…¥ suspend 芲 å—符
(通常是 ^Z, Control-Z) 将使这个进程暂åœï¼Œå°†æŽ§åˆ¶æƒè¿˜ç»™ bash. 输入
delayed suspend , 芲 å—符 (通常是 ^Y, Control-Y)
将使这个进程在试图从终端读å–输入时暂åœï¼Œå°†æŽ§åˆ¶æƒè¿˜ç»™ bash.
用户接下æ¥å¯ä»¥æŽ§åˆ¶æ¤ä½œä¸šçš„状æ€ï¼Œä½¿ç”¨ bg 命令使它在åŽå°ç»§ç»è¿è¡Œï¼Œ fg
命令使它在å‰å°ç»§ç»è¿è¡Œï¼Œæˆ– kill å‘½ä»¤å°†å®ƒæ€æ»ã€‚^Z
会立å³èµ·ä½œç”¨ï¼Œå¹¶ä¸”还有使ç‰å¾…ä¸çš„ (pending)
è¾“å‡ºå’Œè¾“å…¥è¢«å¿½ç•¥çš„é™„åŠ å‰¯ä½œç”¨ã€‚
æœ‰å¾ˆå¤šæ–¹æ³•æ¥æŒ‡ä»£ shell ä¸çš„作业。å—符 % å¯ä»¥å¼•入作业å。编å·ä¸º n
的作业å¯ä»¥ç”¨ %n
çš„å½¢å¼æ¥æŒ‡ä»£ã€‚作业也å¯ä»¥ç”¨å¯åŠ¨å®ƒçš„åç§°çš„å‰ç¼€ï¼Œæˆ–者命令行ä¸çš„åå—ç¬¦ä¸²æ¥æŒ‡ä»£ã€‚例如,
%ce 指代一个暂åœçš„ ce 作业。如果å‰ç¼€åŒ¹é…多于一个作业, bash
报错。å¦ä¸€æ–¹é¢ï¼Œä½¿ç”¨ %?ce, å¯ä»¥æŒ‡ä»£ä»»ä½•命令行ä¸åŒ…å«å—符串 ce
的作业。如果åå—符串匹é…多于一个作业, bash æŠ¥é”™ã€‚ç¬¦å· %% å’Œ %+ 指代
shell æ„义上的 current job,当å‰ä½œä¸šï¼Œ
也就是å‰å°è¢«æš‚åœçš„æœ€åŽä¸€ä¸ªä½œä¸šï¼Œæˆ–者是在åŽå°å¯åŠ¨çš„ä½œä¸šã€‚ previous job
å¯ä»¥ä½¿ç”¨ %- æ¥æŒ‡ä»£ã€‚在有关作业的输出信æ¯ä¸ (例如,命令 jobs
的输出),当å‰ä½œä¸šæ€»æ˜¯è¢«æ ‡è®°ä¸º +, å‰ä¸€ä½œä¸šæ ‡è®°ä¸º -.
简å•地给出作业å,å¯ä»¥ç”¨æ¥æŠŠå®ƒæ”¾åˆ°å‰å°ï¼š %1 是 ``fg %1''
çš„åŒä¹‰è¯ï¼Œå°†ä½œä¸š 1 从åŽå°æ”¾åˆ°å‰å°ã€‚类似的, ``%1 &'' 在åŽå°æ¢å¤ä½œä¸š
1,与 ``bg %1'' ç‰ä»·ã€‚
当æŸä¸ªä½œä¸šæ”¹å˜çŠ¶æ€æ—¶ï¼Œshell ç«‹å³å¯ä»¥å¾—知。通常, bash
ç‰å¾…直到è¦è¾“出一个æç¤ºç¬¦æ—¶ï¼Œæ‰ä¼šæŠ¥å‘Šä½œä¸šçš„状æ€å˜åŒ–,从而ä¸ä¼šæ‰“æ–其他输出。
如果å¯ç”¨äº†å†…建命令 set çš„ -b 选项, bash å°†ç«‹å³æŠ¥å‘Šè¿™äº›å˜åŒ–。对 SIGCHLD
ä¿¡å·çš„陷阱将在æ¯ä¸ªå进程退出时执行。
å¦‚æžœåœ¨ä½œä¸šæš‚åœæ—¶è¯•图退出 bas, shell 打å°ä¸€æ¡è¦å‘Šæ¶ˆæ¯ã€‚命令 jobs
å¯èƒ½è¢«ç”¨æ¥æ£€æŸ¥ä½œä¸šçš„状æ€ã€‚å¦‚æžœå†æ¬¡è¯•图退出,ä¸é—´æ²¡æœ‰å…¶ä»–命令,shell
ä¸ä¼šæ‰“å° å…¶ä»–è¦å‘Šï¼Œæš‚åœçš„作业将终æ¢ã€‚
(PROMPTING)
在交互执行时, bash 在准备好读入一æ¡å‘½ä»¤æ—¶æ˜¾ç¤ºä¸»æç¤ºç¬¦ PS,
åœ¨éœ€è¦æ›´å¤šçš„输入æ¥å®Œæˆä¸€æ¡å‘½ä»¤æ—¶æ˜¾ç¤º PS。 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 的基本部分 (最åŽä¸€ä¸ªæ–œæ åŽé¢çš„部分)
\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 çš„å—符
\\ ä¸€ä¸ªåæ–œæ
\[ 一个ä¸å¯æ‰“å°å—符åºåˆ—的开始,å¯ä»¥ç”¨äºŽåœ¨æç¤ºç¬¦ä¸åµŒå…¥ç»ˆç«¯æŽ§åˆ¶åºåˆ—
\] 一个ä¸å¯æ‰“å°å—符åºåˆ—的结æŸ
命令编å·å’Œåކå²ç¼–å·é€šå¸¸æ˜¯ä¸åŒçš„:历å²ç¼–å·æ˜¯å‘½ä»¤åœ¨åކå²åˆ—表ä¸çš„ä½ç½®ï¼Œå¯èƒ½
包å«ä»Žåކ岿–‡ä»¶ä¸æ¢å¤çš„命令 (å‚è§ä¸‹é¢çš„ HISTORY
ç« èŠ‚)ï¼Œè€Œå‘½ä»¤ç¼–å·æ˜¯å½“å‰ shell 会è¯ä¸æ‰§è¡Œçš„命令åºåˆ—ä¸ï¼Œå‘½ä»¤çš„ä½ç½®ã€‚
å—符串被解ç 之åŽï¼Œå®ƒå°†è¿›è¡Œæ‰©å±•,è¦ç«Ÿ parameter expansion, command sub-
stitution, arithmetic expansion å’Œ quote removal, 最åŽè¦ç«Ÿ shell 选项
promptvars å¤„ç† (å‚è§ä¸‹é¢çš„ shell (SHELL BUILTIN COMMANDS)
ç« èŠ‚ä¸ï¼Œå¯¹å‘½ä»¤ shopt çš„æè¿°)。
readlin (READLINE)
这是在交互 shell ä¸å¤„ç†è¯»å–输入的库,除éžåœ¨ shell å¯åŠ¨æ—¶ç»™å‡ºäº†
--noediting 选项。默认情况下,行编济罾嗨朴 emacs
ä¸çš„那些。也å¯ä»¥ä½¿ç”¨ vi æ ·å¼çš„行编冀缑妗 è¦åœ¨ shell è¿è¡Œä¹‹åŽå…³é—行编-
,使用内置命令 set çš„ +o emacs 或 +o vi 选项 (å‚è§ä¸‹é¢çš„ shell
(SHELL BUILTIN COMMANDS) ç« èŠ‚)。
Readline Notation
在这个å°èŠ‚ä¸ï¼Œå°†ä½¿ç”¨ emacs æ ·å¼çš„记法æ¥è¡¨è¿°æŒ‰é”®ã€‚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),
一般作为é‡å¤çš„计数。有些时候,它是é‡è¦å‚æ•°çš„æ ‡è®°ã€‚ç»™å‘剿–¹è¿›è¡Œçš„命令
(例如,kill-line) ä¼ é€’è´Ÿæ•°å‚æ•°ï¼Œå°†ä½¿å¾—命令å‘åæ–¹å‘进行。
下é¢çš„命令如果接å—傿•°æ—¶çš„行为与æ¤ä¸åŒï¼Œå°†å¦è¡Œè¯´æ˜Žã€‚
当命令被æè¿°ä¸ºå‰ªåˆ‡ (killing) æ–‡æœ¬æ—¶ï¼Œè¢«åˆ é™¤çš„æ–‡æœ¬è¢«ä¿å˜ï¼Œç‰å¾…å°†æ¥ä½¿ç”¨
(粘贴,yanking)。被剪切的文本ä¿å˜åœ¨ kill ring ä¸ã€‚连ç»çš„剪切使得
æ–‡æœ¬è¢«ä¾æ¬¡åŠ å…¥åˆ°ä¸€ä¸ªå•å…ƒä¸ï¼Œå¯ä»¥ä¸€æ¬¡è¢«ç²˜è´´ã€‚ä¸å‰ªåˆ‡æ–‡æœ¬çš„命令将 kill
ring ä¸çš„æ–‡æœ¬åˆ†ç¦»ã€‚
Readline Initialization 化
readline å¯ä»¥é€šè¿‡å°†å‘½ä»¤æ”¾å…¥åˆå§‹åŒ–文件 (inputrc 文件) æ¥å®šåˆ¶ã€‚
文件å从å˜é‡ INPUTRC 的值ä¸èŽ·å–。如果没有设置这个å˜é‡ï¼Œé»˜è®¤æ˜¯ ~/.inpu-
trc. 当使用 readline
库的程åºå¯åŠ¨æ—¶ï¼Œå°†è¯»å–åˆå§‹åŒ–文件,按键关è”å’Œå˜é‡å°†è¢«è®¾ç½®ã€‚ readline
åˆå§‹åŒ–文件ä¸åªå…è®¸æœ‰å¾ˆå°‘çš„åŸºæœ¬æž„é€ ã€‚ 空行被忽略。以 #
开始的行是注释。以 $ 开始的行指示了有æ¡ä»¶çš„æž„é€ ã€‚
其他行表示按键关è”å’Œå˜é‡è®¾ç½®ã€‚
默认的按键关è”å¯ä»¥ä½¿ç”¨ inputrc
文件改å˜ã€‚其他使用这个库的程åºå¯ä»¥æ·»åŠ å®ƒä»¬è‡ªå·±çš„å‘½ä»¤å’Œå…³è”。
例如,将
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
å…许将按键与一个å—符串关è”,当按下这个键时,将æ’入这个å—符串
(一个å®ï¼Œmacro)。
Readline Key Bindings
inputrc
文件ä¸çš„æŽ§åˆ¶æŒ‰é”®å…³è”çš„è¯æ³•éžå¸¸ç®€å•。需è¦çš„å†…å®¹æ˜¯å‘½ä»¤åæˆ–å®ï¼Œä»¥åŠå®ƒåº”当关è”到的按键åºåˆ—。
åç§°å¯ä»¥ä»¥ä¸¤ç§æ–¹å¼æŒ‡å®šï¼šä¸€ä¸ªæŒ‰é”®çš„符å·å称,å¯èƒ½å¸¦æœ‰ Meta- 或 Control-
å‰ç¼€ï¼Œæˆ–者是一个按键åºåˆ—。
当使用 keyname:function-name 或 macro 形弿—¶ï¼Œ keyname
是按键以英文拼写的å称。例如:
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"
在上述例åä¸ï¼Œ C-u 被关è”到函数 universal-argument, M-DEL 被关è”到函数
backward-kill-word, 而 C-o 被关è”为è¿è¡Œå³è¾¹ç»™å‡ºçš„å®
(æ„æ€æ˜¯ï¼Œå°†å‘è¡Œä¸æ’å…¥ ``> output'' )。
在第二ç§å½¢å¼ä¸ï¼Œ"keyseq":function-name 或 macro, keyseq ä¸åŒäºŽä¸Šé¢çš„
keynam,
表示整个按键åºåˆ—çš„å—符串å¯ä»¥é€šè¿‡å°†æŒ‰é”®åºåˆ—放在åŒå¼•å·å¼•ç”¨ä¸æ¥æŒ‡å®šã€‚
å¯ä»¥ä½¿ç”¨ä¸€äº› GNU Emacs
æ ·å¼çš„æŒ‰é”®åºåˆ—,如下例所示,但是ä¸ä¼šè¯†åˆ«æŒ‰é”®çš„符å·å称。
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"
在上述例åä¸ï¼Œ 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 å—符
\\ åæ–œæ
\" å—é¢ä¸Šçš„ "
\' å—é¢ä¸Šçš„ '
除了 GNU Emacs æ ·å¼çš„转义åºåˆ—ï¼Œè¿˜æœ‰ä¸€ç³»åˆ—åæ–œæ 转义åºåˆ—å¯ç”¨ï¼š
\a å“铃
\b 回退
\d åˆ é™¤
\f 进纸
\n 新行符
\r 回车
\t æ°´å¹³è·³æ ¼
\v ç«–ç›´è·³æ ¼
\nnn 一个八比特å—符,它的值是八进制值 nnn
(一到三个八进制数å—)。
\xHH 一个八比特å—符,它的值是åå…进制值 HH
(一到两个åå…进制数å—)。
输入å®çš„æ–‡æœ¬æ—¶ï¼Œå¿…须使用å•引巿ˆ–åŒå¼•å·å¼•用æ¥è¡¨æ˜Žæ˜¯å®çš„定义。
没有引用的文本被当作函数å。在å®çš„定义体ä¸ï¼Œä¸Šè¿°åæ–œæ 转义被扩展。
åæ–œæ å°†å¼•ç”¨å®æ–‡æœ¬ä¸æ‰€æœ‰å…¶ä»–å—符,包括 " å’Œ '。
Bash å…许使用内建命令 bind æ¥æ˜¾ç¤ºå’Œä¿®æ”¹å½“å‰ readline
按键关è”。在交互使用ä¸å¯ä»¥ç”¨å†…建命令 set çš„ -o 选项切æ¢åˆ°ç¼–寄J
(å‚è§ä¸‹é¢çš„ shell (SHELL BUILTIN COMMANDS) ç« èŠ‚)。
Readline Variables
readline 包å«é¢å¤–çš„å¯ç”¨äºŽå®šåˆ¶å®ƒçš„行为的å˜é‡ã€‚å¯ä»¥åœ¨ inputrc
文件ä¸è®¾ç½®å˜é‡ï¼Œä½¿ç”¨å¦‚下形å¼çš„è¯å¥ï¼š
set variable-name value
除éžå¦å¤–说明,readline å˜é‡çš„值总是 On 或 Of。å˜é‡å’Œå®ƒä»¬çš„默认值是:
bell-style (audible)
控制了当 readline 需è¦é¸£ç»ˆç«¯å“铃时的动作。如果设置为 none,
readline ä¸ä¼šé¸£é“ƒã€‚如果设置为 visible,readline
使用å¯è§†çš„å“铃,如果å¯ç”¨çš„è¯ã€‚ 如果设置为 audible,readline
试ç€é¸£ç»ˆç«¯å“铃。
comment-begin (``#'')
这个å—符串在执行 readline 命令 insert-comment
时被æ’入。这个命令在 emacs 模å¼ä¸‹è¢«å…³è”为 M-,在 vi 模å¼ä¸‹æ˜¯
。
completion-ignore-case (Off)
如果设置为 On,readline 进行大å°å†™ä¸æ•感的文件å匹é…和补全。
completion-query-items (100)
这个å˜é‡å†³å®šç€ä½•æ—¶å‘ç”¨æˆ·è¯¢é—®ï¼Œæ˜¯å¦æŸ¥çœ‹ç”±å‘½ä»¤ possible-comple-
tions 产生的å¯èƒ½çš„补全数é‡ã€‚ 它å¯ä»¥è®¾ä¸ºä»»ä½•大于或ç‰äºŽ 0
的值。如果å¯èƒ½çš„补全数é‡å¤§äºŽæˆ–ç‰äºŽè¿™ä¸ªå˜é‡çš„值,
用户将被æç¤ºæ˜¯å¦æ„¿æ„查看它们;å¦åˆ™å°†ç›´æŽ¥åœ¨ç»ˆç«¯ä¸Šåˆ—出它们。
convert-meta (On)
如果设置为 On,readline 将把设置了最高ä½çš„å—符转æ¢ä¸º ASCII
按键åºåˆ—,方法是 去掉第八ä½ï¼Œå‰ç¼€ä¸€ä¸ªè½¬ä¹‰å—符 (实际上,使用 Esc
作为转义符 meta prefix)。
disable-completion (Off)
如果设置为 On,readline
å°†ç¦æ¢è¯çš„补全。补全å—符将被æ’入到行ä¸ï¼Œå°±å¥½åƒå®ƒä»¬è¢« æ˜ å°„ä¸º
self-insert。
editing-mode (emacs)
控制 readline 的按键关è”集åˆä¸Ž emacs 还是 vi 相似。 editing-mode
å¯ä»¥è®¾ç½®ä¸º emacs 或 v。
enable-keypad (Off)
如果设置为 On ,readline 在调用时将试图å¯ç”¨è¾…助键盘。
一些系统需è¦è®¾ç½®è¿™ä¸ªæ¥å¯ç”¨æ–¹å‘键。
expand-tilde (Off)
如果设置为 On,readline 试图进行è¯çš„补全时会进行波浪线扩展。
history-preserve-point
如果设置为 On,历å²ä»£ç 试ç€åœ¨ previous-history 或 next-history
å–回的æ¯ä¸ªåކå²è¡Œçš„相åŒä½ç½®ä¸åŠ ç‚¹ã€‚
horizontal-scroll-mode (Off)
如果设置为 On,将使得 readline
使用å•è¡Œæ¥æ˜¾ç¤ºï¼Œå¦‚果它比å±å¹•宽度è¦é•¿ï¼Œå°±åœ¨
å•一的å±å¹•è¡Œä¸Šæ°´å¹³æ»šåŠ¨è¾“å…¥è¡Œï¼Œè€Œä¸æ˜¯è‡ªåŠ¨å›žç»•åˆ°æ–°è¡Œã€‚
input-meta (Off)
如果设置为 On,readline å°†å…许八比特输入
(也就是说,它ä¸ä¼šå°†å®ƒè¯»å…¥çš„å—ç¬¦ä¸æœ€é«˜ä½åˆ 除),
ä¸ç®¡å®ƒèƒ½æ”¯æŒä»€ä¹ˆæ ·çš„ç»ˆç«¯è¦æ±‚。åç§° meta-flag 与æ¤å˜é‡åŒä¹‰ã€‚
isearch-terminators (``C-[C-J'')
用于终æ¢å¢žé‡çš„æœç´¢ï¼Œä¸å†å°†å—符当作命令执行的å—符串。
如果这个å˜é‡æ²¡æœ‰èµ‹å€¼ï¼Œå—符串 Esc å’Œ C-J 将终æ¢å¢žé‡çš„æœç´¢ã€‚
keymap (emacs)
è®¾ç½®å½“å‰ readline é”®ç›˜æ˜ å°„ã€‚æœ‰æ•ˆçš„é”®ç›˜æ˜ å°„å称是 emacs,
emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command,还有
vi-insert_vi ç‰ä»·äºŽ vi-command; emacs ç‰ä»·äºŽ emacs-stan-
dard。默认值是 emacs; editing-mode 的值也会影å“é»˜è®¤çš„é”®ç›˜æ˜ å°„ã€‚
mark-directories (On)
如果设置为 On,补全的目录åä¼šæ·»åŠ ä¸€ä¸ªæ–œæ 。
mark-modified-lines (Off)
如果设置为 On,已被修改的历å²è¡Œå°†æ˜¾ç¤ºä¸ºå‰ç¼€ä¸€ä¸ªæ˜Ÿå· (*)。
mark-symlinked-directories (Off)
如果设置为
On,补全的å称如果是到目录的符å·é“¾æŽ¥ï¼Œåˆ™å°†æ·»åŠ ä¸€ä¸ªæ–œæ (与
mark-directories çš„å€¼åŒæ ·å¤„ç†)。
match-hidden-files (On)
这个å˜é‡ï¼Œå¦‚果设置为 On,将使得 readline
在进行文件å补全时,匹é…以 `.' 开头的文件 (éšè—文件),
除éžç”¨æˆ·åœ¨è¦è¡¥å…¨çš„æ–‡ä»¶åä¸ç»™å‡ºäº†å‰å¯¼çš„ `.'。
output-meta (Off)
如果设置为 On,readline
将直接显示设置了第八ä½çš„å—ç¬¦ï¼Œè€Œä¸æ˜¯è½¬åŒ–为一个带 meta
å‰ç¼€çš„转义åºåˆ—。
page-completions (On)
如果设置为 On,readline 将使用内建的类似 more 的分页程åºï¼Œ
æ¥æ¯æ¬¡æ˜¾ç¤ºä¸€å±å¯èƒ½çš„补全。
print-completions-horizontally (Off)
如果设置为 On,readline
将匹é…çš„è¡¥å…¨æŒ‰å—æ¯è¡¨é¡ºåºæŽ’åºï¼Œç„¶åŽæ°´å¹³æŽ’列显示出æ¥ï¼Œ
è€Œä¸æ˜¯åœ¨å±å¹•上竖直排列显示。
show-all-if-ambiguous (Off)
这将调整补全函数的默认行为。如果设置为 on,
拥有多于一个å¯èƒ½çš„补全的è¯å°†ç«‹å³åˆ—出所有匹é…ï¼Œè€Œä¸æ˜¯é¸£å“铃。
visible-stats (Off)
如果设置为
On,在列出å¯èƒ½çš„补全时,将在文件ååŽé¢æ·»åŠ ä¸€ä¸ªè¡¨ç¤ºæ–‡ä»¶ç±»åž‹çš„å—符,
文件类型由 stat(2) 报告。
Readline Conditional Constructs
readline 实现了一ç§åŠŸèƒ½ï¼Œæœ¬è´¨ä¸Šä¸Ž C 预处ç†å™¨è¿›è¡Œæ¡ä»¶ç¼–译的功能类似,
å…è®¸æ ¹æ®æµ‹è¯•的结果进行键盘关è”å’Œå˜é‡è®¾ç½®ã€‚å…¶ä¸ä½¿ç”¨äº†å››ç§è§£é‡Šå™¨æŒ‡ä»¤ã€‚
$if $if 结构å…è®¸æ ¹æ®ç¼–寄J剑谑褂玫闹斩è€è¤‚ readline
çš„åº”ç”¨ç¨‹åºæ¥è®¾å®šæŒ‰é”®å…³è”。
测试的文本包括一行,直到行尾;ä¸å¿…用å—符æ¥éš”离它。
mode $if 结构的 mode= å½¢å¼ç”¨äºŽæµ‹è¯• readline 处于 emacs 还是 vi
模å¼ã€‚ è¿™å¯ä»¥ä¸Žå‘½ä»¤ set keymap 结åˆä½¿ç”¨ï¼Œä¾‹å¦‚,设置
emacs-standard å’Œ emacs-ctlx é”®ç›˜æ˜ å°„ï¼Œä»…å½“ readline 以
emacs 模å¼å¯åŠ¨ã€‚
term term=
å½¢å¼ç”¨äºŽåŒ…å«ä¸Žç»ˆç«¯ç›¸å…³çš„æŒ‰é”®å…³è”,也许是将按键åºåˆ—输出与终端的功能键相关è”。
ç‰å· = å³è¾¹çš„è¯è¢«åŒç»ˆç«¯çš„å…¨åå’Œåç§°ä¸ç¬¬ä¸€ä¸ª -
å‰é¢çš„一部分相比较。 例如,å…许 sun åŒæ—¶åŒ¹é… sun å’Œ
sun-cmd_
application
application 结构用于包å«åº”用程åºç›¸å…³çš„设置。æ¯ä¸ªä½¿ç”¨
readline 的程åºéƒ½è®¾ç½® application name,
åˆå§‹åŒ–文件å¯ä»¥æµ‹è¯•它的值。它å¯ç”¨äºŽå°†ä¸€ä¸ªæŒ‰é”®åºåˆ—ä¸Žå¯¹ç‰¹å®šçš„ç¨‹åºæœ‰ç”¨çš„功能相关è”。
ä¾‹å¦‚ï¼Œä¸‹åˆ—å‘½ä»¤æ·»åŠ äº†ä¸€ä¸ªæŒ‰é”®åºåˆ—,用以引用 bash
ä¸å½“å‰çš„è¯æˆ–å‰ä¸€ä¸ªè¯
$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
$endif 上例ä¸çš„这个命令,结æŸäº†ä¸€ä¸ª $if 命令。
$else 如果测试失败,$if 指令ä¸è¿™ä¸ªåˆ†æ”¯çš„命令将被执行。
$include
这个指令使用å•个文件åä½œä¸ºå‚æ•°ï¼Œä»Žæ–‡ä»¶ä¸è¯»å–命令和按键关è”。例如,下列指令
å°†è¯»å– /etc/inputrc:
$include /etc/inputrc
Searching
readline æä¾›äº†ä»Žå‘½ä»¤åކå²ä¸æœç´¢åŒ…å«ç»™å®šå—符串的行的命令 (å‚è§ä¸‹é¢çš„
HISTORY ç« èŠ‚)ã€‚æœ‰ä¸¤ç§æœç´¢æ¨¡å¼ï¼š incremental å’Œ non-incremental.
增é‡çš„æœç´¢åœ¨ç”¨æˆ·ç»“æŸè¾“å…¥æœç´¢å—符串时开始。在æœç´¢å—符串的æ¯ä¸ªå—ç¬¦è¢«è¾“å…¥çš„åŒæ—¶ï¼Œ
readline 显示与已输入的å—符串匹é…çš„ä¸‹ä¸€ä¸ªåŽ†å²æ¡ç›®ã€‚
增é‡çš„æœç´¢åªè¦æ±‚è¾“å…¥èƒ½æ‰¾åˆ°æœŸæœ›çš„åŽ†å²æ¡ç›®æ‰€éœ€çš„那么多å—符。 isearch-ter-
minators å˜é‡ä¸çš„å—符用æ¥ç»ˆæ¢ä¸€æ¬¡å¢žé‡çš„æœç´¢ã€‚å¦‚æžœ
这个å˜é‡æ²¡æœ‰è¢«èµ‹å€¼ï¼ŒEsc å’Œ Ctrl-J å—符串将结æŸä¸€æ¬¡å¢žé‡çš„æœç´¢ã€‚ Ctrl-G
将喿¶ˆä¸€æ¬¡å¢žé‡çš„æœç´¢ï¼Œæ¢å¤åˆå§‹çš„行。当æœç´¢ç»ˆæ¢æ—¶ï¼ŒåŒ…嫿œç´¢å—符串
çš„åŽ†å²æ¡ç›®æˆä¸ºå½“å‰è¡Œã€‚
è¦ä»Žåކå²åˆ—è¡¨ä¸æ‰¾åˆ°å…¶ä»–匹é…çš„æ¡ç›®ï¼Œé€‚当地键入 Ctrl-S 或 Ctrl-R。
è¿™æ ·å°†åœ¨åŽ†å²ä¸å‘å‰/å‘åŽæœç´¢ä¸‹ä¸€ä¸ªåŒ¹é…已输入的æœç´¢å—符串的æ¡ç›®ã€‚
å…¶ä»–å…³è”到æŸä¸ª readline 命令的按键åºåˆ—å°†ç»ˆæ¢æœç´¢å¹¶æ‰§è¡Œå…³è”的命令。
例如,newline å°†ç»ˆæ¢æœç´¢ï¼ŒæŽ¥å—当å‰è¡Œï¼Œä»Žè€Œæ‰§è¡Œåކå²åˆ—表ä¸çš„命令。
readline å¯ä»¥è®°ä½ä¸Šæ¬¡å¢žé‡æœç´¢çš„å—符串。如果键入两次 Ctrl-R,ä¸é—´æ²¡æœ‰
输入任何å—符æ¥å®šä¹‰ä¸€ä¸ªæ–°çš„æœç´¢å—符串,那么将使用已记ä½çš„æœç´¢å—符串。
éžå¢žé‡çš„æœç´¢å°†æ•´ä¸ªæœç´¢å—ç¬¦ä¸²è¯»å…¥ï¼Œç„¶åŽæ‰å¼€å§‹æœç´¢åŒ¹é…çš„åŽ†å²æ¡ç›®ã€‚
æœç´¢å—符串å¯ä»¥ç”±ç”¨æˆ·è¾“入,或者是当å‰è¡Œçš„内容的一部分。
Readline Command Names
下é¢åˆ—出的是命令的å称以åŠé»˜è®¤æƒ…况下它们关è”的按键åºåˆ—。
命令å称如果没有对应的按键åºåˆ—,那么默认是没有关è”的。在下列æè¿°ä¸ï¼Œ 点
(point) 指当å‰å…‰æ ‡ä½ç½®ï¼Œæ ‡è®° (mark) 指命令 set-mark
ä¿å˜çš„å…‰æ ‡ä½ç½®ã€‚point å’Œ mark 之间的文本被称为范围 (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)
å‘åŽç§»åŠ¨åˆ°å½“å‰æˆ–上一è¯é¦–。
clear-screen (C-l)
清除å±å¹•,ä¿ç•™å½“å‰è¡Œåœ¨å±å¹•é¡¶ç«¯ã€‚æœ‰å‚æ•°æ—¶ï¼Œåˆ·æ–°å½“å‰è¡Œï¼Œä¸æ¸…å±ã€‚
redraw-current-line
刷新当å‰è¡Œã€‚
Commands for Manipulating the History
accept-line (Newline, Return)
接å—这一行,ä¸ç®¡å…‰æ ‡åœ¨ä»€ä¹ˆä½ç½®ã€‚如果行éžç©ºï¼Œå°†æ ¹æ®å˜é‡ HISTCON-
TROL
的状æ€åŠ å…¥åˆ°åŽ†å²åˆ—表ä¸ã€‚如果行是修改过的历å²è¡Œï¼Œå°†æ¢å¤è¯¥åކå²è¡Œåˆ°åˆå§‹çжæ€ã€‚
previous-history (C-p)
从历å²åˆ—表ä¸å–å¾—å‰ä¸€ä¸ªå‘½ä»¤ï¼Œä»Žåˆ—表ä¸å‘åŽç§»åŠ¨ã€‚
next-history (C-n)
从历å²åˆ—表ä¸å–å¾—åŽä¸€ä¸ªå‘½ä»¤ï¼Œä»Žåˆ—表ä¸å‘å‰ç§»åŠ¨ã€‚
beginning-of-history (M-<)
移动到历å²ä¸çš„第一行。
end-of-history (M->)
移动到输入历å²è¡Œçš„æœ«å°¾ï¼Œä¹Ÿå°±æ˜¯å½“å‰è¾“入的行的末尾。
reverse-search-history (C-r)
从当å‰è¡Œå¼€å§‹å‘åŽæœç´¢ï¼ŒæŒ‰ç…§éœ€è¦åœ¨åކå²ä¸å‘“上â€ç§»åŠ¨ã€‚è¿™æ˜¯ä¸€ä¸ªå¢žé‡çš„æœç´¢ã€‚
forward-search-history (C-s)
从当å‰è¡Œå¼€å§‹å‘剿œç´¢ï¼ŒæŒ‰ç…§éœ€è¦åœ¨åކå²ä¸å‘“下â€ç§»åŠ¨ã€‚è¿™æ˜¯ä¸€ä¸ªå¢žé‡çš„æœç´¢ã€‚
non-incremental-reverse-search-history (M-p)
从当å‰è¡Œå¼€å§‹å‘åŽï¼Œä½¿ç”¨éžå¢žé‡æœç´¢æ¥æŸ¥æ‰¾ç”¨æˆ·ç»™å‡ºçš„å—符串。
non-incremental-forward-search-history (M-n)
从当å‰è¡Œå¼€å§‹å‘å‰ï¼Œä½¿ç”¨éžå¢žé‡æœç´¢æ¥æŸ¥æ‰¾ç”¨æˆ·ç»™å‡ºçš„å—符串。
history-search-forward
从当å‰è¡Œå¼€å§‹å‘剿œç´¢åކå²ï¼ŒæŸ¥æ‰¾ä»Žå½“å‰è¡Œé¦–到 point 之间的å—符串。
这是一个éžå¢žé‡çš„æœç´¢ã€‚
history-search-backward
从当å‰è¡Œå¼€å§‹å‘åŽæœç´¢åކå²ï¼ŒæŸ¥æ‰¾ä»Žå½“å‰è¡Œé¦–到 point 之间的å—符串。
这是一个éžå¢žé‡çš„æœç´¢ã€‚
yank-nth-arg (M-C-y)
å°†å‰ä¸€ä¸ªå‘½ä»¤çš„ç¬¬ä¸€ä¸ªå‚æ•° (通常是上一行的第二个è¯) æ’入到 point
ä½ç½®ã€‚æœ‰å‚æ•° n 时,将å‰ä¸€ä¸ªå‘½ä»¤çš„第 n ä¸ªè¯ (å‰ä¸€ä¸ªå‘½ä»¤ä¸çš„è¯ä»Ž 0
开始计数) æ’入到 point ä½ç½®ã€‚è´Ÿæ•°å‚æ•°åˆ™æ’å…¥å‰ä¸€ä¸ªå‘½ä»¤å€’数第 n
个è¯ã€‚
yank-last-arg (M-., M-_)
æ’å…¥å‰ä¸€ä¸ªå‘½ä»¤çš„æœ€åŽä¸€ä¸ªå‚æ•°
(ä¸Šä¸€åŽ†å²æ¡ç›®çš„æœ€åŽä¸€ä¸ªè¯)ã€‚æœ‰å‚æ•°æ—¶ï¼Œ 行为类似于
yank-nth-arg。åŽç»§çš„ yank-last-arg 调用将
从历å²åˆ—表ä¸å‘åŽç§»åŠ¨ï¼Œä¾æ¬¡å°†æ¯è¡Œçš„æœ€åŽä¸€ä¸ªå‚æ•°æ’入。
shell-expand-line (M-C-e)
æ‰©å±•è¡Œï¼Œåƒ shell åšçš„é‚£æ ·ã€‚å…¶ä¸åŒ…å«åˆ«åå’ŒåŽ†å²æ‰©å±•,还有所有的
shell è¯çš„æ‰©å±•。 å‚è§ä¸‹é¢çš„ HISTORY EXPANSION
ä¸å…³äºŽåކ岿‰©å±•çš„æè¿°ã€‚
history-expand-line (M-^)
在当å‰è¡Œè¿›è¡Œåކ岿‰©å±•。å‚è§ä¸‹é¢çš„ HISTORY EXPANSION
ä¸å…³äºŽåކ岿‰©å±•çš„æè¿°ã€‚
magic-space
在当å‰è¡Œè¿›è¡Œåކ岿‰©å±•,并æ’å…¥ä¸€ä¸ªç©ºæ ¼ã€‚å‚è§ä¸‹é¢çš„ HISTORY EXPAN-
SION ä¸å…³äºŽåކ岿‰©å±•çš„æè¿°ã€‚
alias-expand-line
在当å‰è¡Œè¿›è¡Œåˆ«å扩展,å‚è§ä¸Šé¢çš„ ALIASES ä¸å…³äºŽåˆ«å扩展的æè¿°ã€‚
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)
å¯åŠ¨ä¸€ä¸ªç¼–è®¡é³Žå—‰å½“å‰å‘½ä»¤è¡Œï¼Œå°†ç»“果作为 shell 命令è¿è¡Œã€‚ Bash
将便¬¡è¯•ç€è¿è¡Œ $FCEDIT, $EDITOR, å’Œ emacs 作为编计鳌
Commands for Changing Text 本
delete-char (C-d)
åˆ é™¤ point 处的å—符。如果 point
åœ¨è¡Œé¦–ï¼Œè¡Œä¸æ²¡æœ‰å—符,最åŽä¸€æ¬¡è¾“入的å—符 没有被关è”到
delete-char,将返回 EOF.
backward-delete-char (Rubout)
åˆ é™¤å…‰æ ‡ä¹‹åŽçš„å—ç¬¦ã€‚å½“ç»™å‡ºä¸€ä¸ªæ•°å€¼çš„å‚æ•°æ—¶ï¼Œä¿å˜åˆ 除的文本到
kill ring ä¸ã€‚
forward-backward-delete-char
åˆ é™¤å…‰æ ‡ä¸‹çš„å—符,除éžå…‰æ ‡åœ¨è¡Œå°¾ï¼Œæ¤æ—¶åˆ é™¤å…‰æ ‡åŽçš„å—符。
quoted-insert (C-q, C-v)
将输入的下一å—ç¬¦ä¿æŒåŒç ‘æ‹¥å«å…„å°ï¼ 纾梢æ‚盟床迦肜嗨 C-q
çš„å—符。
tab-insert (C-v TAB)
æ’å…¥ä¸€ä¸ªè·³æ ¼ç¬¦å·ã€‚
self-insert (a, b, A, 1, !, ...)
æ’入键入的å—符。
transpose-chars (C-t)
å°† point 之å‰çš„å—符å‘å‰ç§»åŠ¨ï¼Œè¶Šè¿‡ point 处的å—ç¬¦ï¼ŒåŒæ—¶ä¹Ÿæ”¹å˜
point çš„ä½ç½®ã€‚ 如果 point åœ¨è¡Œå°¾ï¼Œå°†è°ƒæ¢ point
之å‰çš„两个å—ç¬¦ã€‚è´Ÿæ•°å‚æ•°æ²¡æœ‰ä½œç”¨ã€‚
transpose-words (M-t)
å°† point 之å‰çš„è¯å‘å‰ç§»åŠ¨ï¼Œè¶Šè¿‡ point 处的è¯ï¼ŒåŒæ—¶ä¹Ÿæ”¹å˜ point
çš„ä½ç½®ã€‚ 如果 point 在行尾,将调æ¢è¡Œä¸çš„æœ€åŽä¸¤ä¸ªè¯ã€‚
upcase-word (M-u)
å°†å½“å‰ (或下一个)
è¯å˜æˆå…¨å¤§å†™ã€‚æœ‰è´Ÿå€¼çš„å‚æ•°æ—¶ï¼Œå°†å‰ä¸€ä¸ªè¯å˜ä¸ºå¤§å†™ï¼Œ 但是ä¸ç§»åЍ
point。
downcase-word (M-l)
å°†å½“å‰ (或下一个)
è¯å˜æˆå…¨å°å†™ã€‚æœ‰è´Ÿå€¼çš„å‚æ•°æ—¶ï¼Œå°†å‰ä¸€ä¸ªè¯å˜ä¸ºå°å†™ï¼Œ 但是ä¸ç§»åЍ
point。
capitalize-word (M-c)
å°†å½“å‰ (或下一个)
è¯å˜ä¸ºé¦–å—å¤§å†™ã€‚æœ‰è´Ÿå€¼çš„å‚æ•°æ—¶ï¼Œå°†å‰ä¸€ä¸ªè¯å˜ä¸ºé¦–å—大写,
但是ä¸ç§»åЍ point。
overwrite-mode
控制æ’å…¥/改写模å¼ã€‚ç»™å‡ºä¸€ä¸ªæ£æ•´æ•°å‚数时,切æ¢ä¸ºæ”¹å†™æ¨¡å¼ã€‚ç»™å‡ºä¸€ä¸ªéžæ£æ•°
傿•°æ—¶ï¼Œåˆ‡æ¢ä¸ºæ’入模å¼ã€‚这个命令åªå½±å“ emacs 模å¼ï¼›vi 模å¼
的改写与æ¤ä¸åŒã€‚æ¯ä¸ªå¯¹ readline()
的调用都以æ’入模å¼å¼€å§‹ã€‚在改写模å¼ä¸‹ï¼Œ å…³è”到 self-insert
çš„å—ç¬¦æ›¿æ¢ point 处的å—ç¬¦ï¼Œè€Œä¸æ˜¯å°†å®ƒæŽ¨åˆ°å³è¾¹ã€‚ å…³è”到 back-
ward-delete-char çš„å—ç¬¦ä»¥ç©ºæ ¼æ›¿æ¢ point å‰çš„å—符。
默认情况下,这个命令没有关è”。
Killing and Yanking è´´
kill-line (C-k)
剪切从 point 到行尾的文本。
backward-kill-line (C-x Rubout)
åå‘剪切到行首。
unix-line-discard (C-u)
åå‘剪切到行首。与 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--)
将这个数å—åŠ å…¥å·²æœ‰çš„ (already accumulating)
傿•°ä¸ï¼Œæˆ–è€…å¼€å§‹æ–°çš„å‚æ•°ã€‚ M-- 开始一个å¦å®šçš„傿•°ã€‚
universal-argument
è¿™æ˜¯æŒ‡å®šå‚æ•°çš„å¦ä¸€ç§æ–¹æ³•。如果这个命令åŽé¢è·Ÿç€ä¸€ä¸ªæˆ–多个数å—,
å¯èƒ½è¿˜åŒ…å«å‰å¯¼çš„è´Ÿå·ï¼Œè¿™äº›æ•°å—å®šä¹‰äº†å‚æ•°ã€‚如果命令之åŽè·Ÿéšç€æ•°å—ï¼Œå†æ¬¡æ‰§è¡Œ
universal-argument
å°†ç»“æŸæ•°å—傿•°ï¼Œä½†æ˜¯å…¶ä»–情况下被忽略。有一ç§ç‰¹æ®Šæƒ…况,如果命令之åŽç´§æŽ¥ç€
ä¸€ä¸ªå¹¶éžæ•°å—或负å·çš„å—ç¬¦ï¼Œä¸‹ä¸€å‘½ä»¤çš„å‚æ•°è®¡æ•°å°†ä¹˜ä»¥ 4。
傿•°è®¡æ•°åˆå§‹æ˜¯ 1ï¼Œå› æ¤ç¬¬ä¸€æ¬¡æ‰§è¡Œè¿™ä¸ªå‡½æ•°ï¼Œä½¿å¾—傿•°è®¡æ•°ä¸º 4,
ç¬¬äºŒæ¬¡æ‰§è¡Œä½¿å¾—å‚æ•°è®¡æ•°ä¸º 16,以æ¤ç±»æŽ¨ã€‚
Completing å…¨
complete (TAB)
试ç€å¯¹ point 之å‰çš„æ–‡æœ¬è¿›è¡Œè¡¥å…¨ã€‚ Bash
便¬¡è¯•ç€å°†æ–‡æœ¬ä½œä¸ºä¸€ä¸ªå˜é‡ (如果文本以 $ 开始),一个用户å
(如果文本以 ~ 开始),主机å (如果文本以 @ 开始),或者命令
(以åŠåˆ«å和函数) æ¥è¡¥å…¨ã€‚如果这些都没有匹é…,将å°è¯•文件å补全。
possible-completions (M-?)
列出 point 之å‰çš„æ–‡æœ¬å¯èƒ½çš„补全。
insert-completions (M-*)
æ’å…¥ possible-completions 已产生的 point 之å‰çš„æ–‡æœ¬æ‰€æœ‰çš„补全。
menu-complete
与 complete
相似,但是使用å¯èƒ½çš„补全列表ä¸çš„æŸä¸ªåŒ¹é…æ›¿æ¢è¦è¡¥å…¨çš„è¯ã€‚
é‡å¤æ‰§è¡Œ menu-complete å°†é历å¯èƒ½çš„补全列表,æ’å…¥æ¯ä¸ªåŒ¹é…。
到达补全列表的结尾时,鸣终端å“铃 (按照 bell-style 的设置æ¥åš)
å¹¶æ¢å¤åˆå§‹çš„æ–‡æœ¬ã€‚ 傿•° n 将在匹é…列表ä¸å‘å‰ç§»åЍ n
æ¥ï¼›è´Ÿæ•°å‚æ•°å¯ä»¥ç”¨äºŽåœ¨åˆ—表ä¸å‘åŽç§»åŠ¨ã€‚ 这个命令应当与 TAB
键关è”,但是默认情况下是没有关è”的。
delete-char-or-list
åˆ é™¤å…‰æ ‡ä¸‹çš„å—ç¬¦ï¼Œå¦‚æžœä¸æ˜¯åœ¨è¡Œé¦–或行尾 (类似 delete-char)。
如果在行尾,行为与 possible-completions 一致。
这个命令默认没有关è”。
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)
釿–°æ‰§è¡Œä¸Šæ¬¡å®šä¹‰çš„键盘å®ï¼Œå³æ˜¾ç¤ºå‡ºå®ä¸çš„å—符,好åƒå®ƒä»¬æ˜¯ä»Žé”®ç›˜è¾“å…¥çš„ä¸€æ ·ã€‚
Miscellaneous
re-read-init-file (C-x C-r)
读入 inputrc 文件的内容,åˆå¹¶å…¶ä¸çš„æŒ‰é”®å…³è”å’Œå˜é‡èµ‹å€¼ã€‚
abort (C-g)
å–æ¶ˆå½“å‰ç¼–æµŽç¿æ–©è®¼ç‚ (按照 bell-style 的设置æ¥åš)。
do-uppercase-version (M-a, M-b, M-x, ...)
如果有 Meta å‰ç¼€çš„å—符 x
是å°å†™çš„,那么与命令相关连的是对应的大写å—符。
prefix-meta (ESC)
将输入的下一个å—ç¬¦åŠ ä¸Š Meta å‰ç¼€ã€‚ ESC f ç‰ä»·äºŽ Meta-f.
undo (C-_, C-x C-u)
增é‡çš„æ’¤é”€ï¼Œåˆ†åˆ«è®°ä½æ¯ä¸€è¡Œã€‚
revert-line (M-r)
撤销这一行的所有修改。这与执行命令 undo
足够多次的效果相åŒï¼Œå°†è¿™ä¸€è¡Œæ¢å¤åˆ°åˆå§‹çжæ€ã€‚
tilde-expand (M-&)
对当å‰è¯è¿›è¡Œæ³¢æµªçº¿æ‰©å±•。
set-mark (C-@, M-<space>)
在 point 处设置
markã€‚å¦‚æžœç»™å‡ºäº†æ•°å€¼çš„å‚æ•°ï¼Œæ ‡è®°è¢«è®¾ç½®åˆ°é‚£ä¸ªä½ç½®ã€‚
exchange-point-and-mark (C-x C-x)
äº¤æ¢ point å’Œ
mark。当å‰å…‰æ ‡ä½ç½®è¢«è®¾ç½®ä¸ºä¿å˜çš„ä½ç½®ï¼Œæ—§å…‰æ ‡ä½ç½®è¢«ä¿å˜ä¸º mark。
character-search (C-])
读入一个å—符,point
移动到这个å—符下一次出现的地方。负数将æœç´¢ä¸Šä¸€ä¸ªå‡ºçŽ°ã€‚
character-search-backward (M-C-])
读入一个å—符,point
移动到这个å—符上一次出现的地方。负数将æœç´¢ä¸‹é¢çš„出现。
insert-comment (M-#)
æ²¡æœ‰æ•°å€¼çš„å‚æ•°æ—¶ï¼Œreadline å˜é‡ comment-begin
的值将被æ’入到当å‰è¡Œé¦–ã€‚å¦‚æžœç»™å‡ºä¸€ä¸ªæ•°å€¼çš„å‚æ•°ï¼Œå‘½ä»¤çš„行为类似于一个开关:
如果行首å—符ä¸åŒ¹é… comment-begin 的值,将æ’入这个值,å¦åˆ™ 匹é…
comment-begin
çš„å—ç¬¦å°†è¢«ä»Žè¡Œé¦–åˆ é™¤ã€‚åœ¨ä¸¤ç§æƒ…况下,这一行都被接å—,
好åƒè¾“å…¥äº†æ–°è¡Œç¬¦ä¸€æ ·ã€‚comment-begin
的默认值使得这个命令将当å‰è¡Œå˜æˆ ä¸€æ¡ shell
æ³¨é‡Šã€‚å¦‚æžœæ•°å€¼å‚æ•°ä½¿å¾—注释å—ç¬¦è¢«åˆ é™¤ï¼Œè¿™ä¸€è¡Œå°†è¢« shell 执行。
glob-complete-word (M-g)
point
之å‰çš„è¯è¢«å½“作路径扩展的一个模å¼ï¼Œå°¾éƒ¨æš—å«äº†ä¸€ä¸ªæ˜Ÿå·ã€‚这个模å¼è¢«ç”¨æ¥
为å¯èƒ½çš„补全产生匹é…的文件å列表。
glob-expand-word (C-x *)
point
之å‰çš„è¯è¢«å½“作路径扩展的一个模å¼ï¼ŒåŒ¹é…的文件å的列表被æ’入,替æ¢è¿™ä¸ªè¯ã€‚
å¦‚æžœç»™å‡ºä¸€ä¸ªæ•°å€¼å‚æ•°ï¼Œåœ¨è·¯å¾„扩展之å‰å°†æ·»åŠ ä¸€ä¸ªæ˜Ÿå·ã€‚
glob-list-expansions (C-x g)
显示 glob-expand-word
å¯èƒ½äº§ç”Ÿçš„æ‰©å±•的列表,é‡ç»˜å½“å‰è¡Œã€‚å¦‚æžœç»™å‡ºä¸€ä¸ªæ•°å€¼å‚æ•°ï¼Œåœ¨è·¯å¾„扩展之å‰å°†æ·»åŠ ä¸€ä¸ªæ˜Ÿå·ã€‚
dump-functions
å‘ readline
è¾“å‡ºæµæ‰“å°æ‰€æœ‰çš„函数和它们的按键关è”ã€‚å¦‚æžœç»™å‡ºä¸€ä¸ªæ•°å€¼å‚æ•°ï¼Œ
è¾“å‡ºå°†è¢«æ ¼å¼åŒ–,å¯ä»¥ç”¨ä½œ inputrc 文件一部分。
dump-variables
å‘ readline è¾“å‡ºæµæ‰“å°æ‰€æœ‰å¯è®¾ç½®çš„ readline
å‡½æ•°ã€‚å¦‚æžœç»™å‡ºä¸€ä¸ªæ•°å€¼å‚æ•°ï¼Œ è¾“å‡ºå°†è¢«æ ¼å¼åŒ–,å¯ä»¥ç”¨ä½œ inputrc
文件一部分。
dump-macros
å‘ readline è¾“å‡ºæµæ‰“å°æ‰€æœ‰å…³è”到å®çš„ readline
按键åºåˆ—以åŠå®ƒä»¬è¾“出的å—符串。
å¦‚æžœç»™å‡ºä¸€ä¸ªæ•°å€¼å‚æ•°ï¼Œè¾“å‡ºå°†è¢«æ ¼å¼åŒ–,å¯ä»¥ç”¨ä½œ inputrc
文件一部分。
display-shell-version (C-x C-v)
æ˜¾ç¤ºå½“å‰ bash 实例的版本信æ¯ã€‚
Programmable Completion å…¨
å½“è¯•å›¾å¯¹ä¸€ä¸ªå‘½ä»¤çš„å‚æ•°è¿›è¡Œè¯çš„补全时,如果已臼褂媚诮 complete
定义了这个命令的补全规则 ( compspec),将å¯åЍå¯ç¼–程补全功能 (å‚è§ä¸‹é¢çš„
shell (SHELL BUILTIN COMMANDS) ç« èŠ‚)。
首先,命令å被确认。如果针对这个命令有补全规则的定义,那么将使用
规则æ¥äº§ç”Ÿå¯èƒ½çš„è¯çš„è¡¥å…¨çš„åˆ—è¡¨ã€‚å¦‚æžœå‘½ä»¤è¯æ˜¯ä¸€ä¸ªè·¯å¾„å…¨å,将首先æœç´¢
针对这个路径全åçš„è§„åˆ™ã€‚å¦‚æžœé’ˆå¯¹è¿™ä¸ªè·¯å¾„å…¨åæ²¡æœ‰æ‰¾åˆ°è§„则,将å°è¯•查找
针对最åŽä¸€ä¸ªæ–œæ åŽé¢çš„部分的规则。
一旦找到了一个规则,它将用作产生匹é…çš„è¯ã€‚å¦‚æžœæ²¡æœ‰æ‰¾åˆ°ï¼Œå°†è¿›è¡Œä¸Šé¢ Com-
pleting ä¸æè¿°çš„ bash 默认的补全。
é¦–å…ˆï¼Œå°†æ‰§è¡Œè§„åˆ™æŒ‡å®šçš„åŠ¨ä½œã€‚åªæœ‰ä»¥è¢«è¡¥å…¨çš„è¯å¼€å§‹çš„匹é…è¯æ‰ä¼šè¢«è¿”回。
当在文件或目录å补全ä¸ä½¿ç”¨ -f 或 -d 选项时,shell å˜é‡ FIGNORE
将用于对匹é…进行过滤。
接下æ¥ï¼Œå°†äº§ç”Ÿæ‰€æœ‰ç”±-G é€‰é¡¹ç»™å‡ºçš„æ–‡ä»¶åæ‰©å±•æ¨¡å¼æŒ‡å®šçš„补全。
模å¼äº§ç”Ÿçš„è¯ä¸å¿…匹é…è¦è¡¥å…¨çš„è¯ã€‚shell å˜é‡ GLOBIGNORE
ä¸ä¼šç”¨äºŽè¿‡æ»¤åŒ¹é…结果,但是å˜é‡ FIGNORE 会被使用。
接下æ¥ï¼Œå°†è€ƒè™‘ -W é€‰é¡¹çš„å‚æ•°æŒ‡å®šçš„å—符串。这个å—符串首先被
划分,用特殊å˜é‡ IFS ä¸çš„å—符作为分隔符。shell 引用被当作一个è¯ã€‚
接下æ¥ï¼Œæ¯ä¸ªè¯è¢«æ‰©å±•ï¼Œä½¿ç”¨ä¸Šé¢ EXPANSION ä¸æè¿°çš„ brace expansion,
tilde expansion, parameter 和 variable expansion, command substitution,
arithmetic expansion, ä»¥åŠ pathname expansion
规则处ç†ã€‚对于结果,å†ä½¿ç”¨ä¸Šé¢ Word Splitting ä¸æè¿°çš„è§„åˆ™åˆ’åˆ†æˆè¯ã€‚
扩展的结果与è¦è¡¥å…¨çš„è¯è¿›è¡Œå‰éƒ¨ä¸€è‡´çš„æ¯”较,匹é…çš„è¯æˆä¸ºå¯èƒ½çš„补全。
在这些匹é…被产生åŽï¼Œä»»ä½•ç”± -F å’Œ -C 选项指定的 shell
函数和命令将被执行。当命令或函数被执行时,å˜é‡ COMP_LINE å’Œ COMP_POINT
è¢«èµ‹å€¼ï¼Œä½¿ç”¨ä¸Šé¢ Shell Variables ä¸çš„规则。 å¦‚æžœè¦æ‰§è¡Œ shell
函数,还将设置å˜é‡ COMP_WORDS å’Œ COMP_CWORD
å½“å‡½æ•°æˆ–å‘½ä»¤è¢«æ‰§è¡Œæ—¶ï¼Œç¬¬ä¸€ä¸ªå‚æ•°æ˜¯ç‰å¾…傿•°è¢«è¡¥å…¨çš„命令的å称,
ç¬¬äºŒä¸ªå‚æ•°æ˜¯è¦è¡¥å…¨çš„è¯ï¼Œç¬¬ä¸‰ä¸ªå‚数是当å‰å‘½ä»¤è¡Œä¸ï¼Œè¦è¡¥å…¨çš„è¯å‰é¢çš„è¯ã€‚
对è¦è¡¥å…¨çš„è¯äº§ç”Ÿçš„补全ä¸ä¼šè¿›è¡Œä»»ä½•è¿‡æ»¤ï¼›å‡½æ•°æˆ–å‘½ä»¤åœ¨äº§ç”ŸåŒ¹é…æ—¶æœ‰å®Œå…¨çš„自由。
任何 -F 指定的函数将被首先执行。函数å¯ä»¥ä½¿ç”¨ä»»ä½• shell 功能,
包å«å†…建命令 compgen,æ¥äº§ç”ŸåŒ¹é…。它必须将å¯èƒ½çš„补全放到数组å˜é‡ COM-
PREPLY ä¸ã€‚
接下æ¥ï¼Œä»»ä½• -C 选项指定的命令将被执行,其执行环境与命令替æ¢
的环境相åŒã€‚å®ƒåº”å½“å‘æ ‡å‡†è¾“出打å°ä¸€ä¸ªè¡¥å…¨çš„列表,æ¯è¡Œä¸€ä¸ªã€‚
åæ–œæ å¯ä»¥ç”¨æ¥è½¬ä¹‰ä¸€ä¸ªæ–°è¡Œç¬¦ï¼Œå¦‚果需è¦çš„è¯ã€‚
所有å¯èƒ½çš„补全都产生之åŽï¼Œå°†å¯¹åˆ—表进行 -X 选项指定的任何过滤。
过滤器是一个模å¼ï¼Œå’Œè·¯å¾„忉©å±•ä¸çš„ä¸€æ ·ï¼›æ¨¡å¼ä¸çš„ & 替æ¢ä¸º
è¦è¡¥å…¨çš„è¯ã€‚å—é¢ä¸Šçš„ & å¯ä»¥ç”¨åæ–œæ è½¬ä¹‰ï¼›åæ–œæ åœ¨è¿›è¡ŒåŒ¹é…æ—¶è¢«åˆ 除。
任何匹é…这个模å¼çš„补全将从列表ä¸åˆ 除。å‰å¯¼çš„ ! 将使模å¼å«ä¹‰ç›¸åï¼›
è¿™ç§æƒ…况下,任何ä¸åŒ¹é…这个模å¼çš„è¡¥å…¨å°†è¢«åˆ é™¤ã€‚
最åŽï¼ŒB-P å’Œ -S 指定的任何å‰ç¼€å’ŒåŽç¼€è¢«æ·»åŠ åˆ°è¡¥å…¨åˆ—è¡¨çš„æ¯ä¸ª
æˆå‘˜åŽé¢ï¼Œç»“果返回给 readline 补全代ç ,作为å¯èƒ½çš„补全列表。
å¦‚æžœå…ˆå‰æ‰§è¡Œçš„动作没有产生任何匹é…,并且在定义 compspec 规则时,为 com-
plete 命令æä¾›äº† -o dirname 选项,将å°è¯•目录å补全。
默认情况下,如果找到了一个规则,它产生的任何东西都被返回给补全代ç ,
作为å¯èƒ½çš„补全的全集。ä¸å†å°è¯•默认的 bash 补全,readline 默认的
文件åè¡¥å…¨ä¹Ÿä¼šç¦æ¢ã€‚如果定义规则时,为 complete 命令æä¾›äº† -o default
é€‰é¡¹ï¼Œåœ¨è§„åˆ™æ²¡æœ‰äº§ç”ŸåŒ¹é…æ—¶å°†è¿›è¡Œ readline 默认的补全处ç†ã€‚
当一个规则指出期望目录å补全时,å¯ç¼–程补全函数强制 readline
在补全的åç§° åŽé¢æ·»åŠ ä¸€ä¸ªæ–œæ ,如果它是一个到目录的符å·è¿žæŽ¥ã€‚ç„¶åŽè¿˜è¦-
过 readline å˜é‡ mark-directories 的值处ç†ï¼Œä¸ç®¡ readline å˜é‡
mark-symlinked-directories 的值是什么。
(HISTORY)
当å¯ç”¨å†…建命令 set çš„ -o history 选项时,shell å…许访问 command his-
tory,以å‰è¾“入的命令的列表。 HISTSIZE
的值用作命令列表ä¸ä¿å˜çš„命令数é‡ã€‚ 过去 HISTSIZE 个 (默认为500)
命令将被ä¿å˜ã€‚shell å°†æ¯æ¡å‘½ä»¤åœ¨è¿›è¡Œå‚æ•°å’Œå˜é‡æ‰©å±•ä¹‹å‰ ä¿å˜åˆ°åކå²åˆ—表ä¸
(å‚è§ä¸Šé¢çš„ EXPANSION 段è½)ï¼Œä½†æ˜¯æ˜¯åœ¨åŽ†å²æ‰©å±•进行之åŽï¼Œå¹¶ä¸”è¦ç«Ÿ shell
å˜é‡ HISTIGNORE å’Œ HISTCONTROL 处ç†ã€‚
在å¯åŠ¨æ—¶ï¼ŒåŽ†å²æ ¹æ®ä»¥å˜é‡ HISTFILE 的值为å的文件 (默认是 ~/.bash_his-
tory) 进行åˆå§‹åŒ–。 如果需è¦çš„è¯ï¼Œä»¥ HISTFILE
为å的文件将被截æ–,æ¥åŒ…å«ä¸è¶…过å˜é‡ HISTFILESIZE
的值指定的行数。当交互 shell é€€å‡ºæ—¶ï¼Œæœ€åŽ $HISTSIZE
行被从历å²åˆ—表ä¸å¤åˆ¶åˆ° $HISTFILE 文件ä¸ã€‚如果å¯ç”¨äº† shell 选项 histap-
pend (å‚è§ä¸‹é¢çš„ shell (SHELL BUILTIN COMMANDS)
ç« èŠ‚ä¸å¯¹å†…建命令 shopt
çš„æè¿°)ï¼Œè¿™äº›è¡Œè¢«è¿½åŠ åˆ°åŽ†å²æ–‡ä»¶ä¸ï¼Œå¦åˆ™åކ岿–‡ä»¶è¢«è¦†ç›–。如果 HISTFILE
è¢«å–æ¶ˆå®šä¹‰ï¼Œæˆ–è€…å¦‚æžœåŽ†å²æ–‡ä»¶ä¸å¯å†™ï¼Œåކå²å°†ä¸ä¼šä¿å˜ã€‚ä¿å˜åކå²ä¹‹åŽï¼Œ
åŽ†å²æ–‡ä»¶è¢«æˆªæ–,以包å«ä¸è¶…过 HISTFILESIZE 行。如果 HISTFILESIZE
è¢«å–æ¶ˆå®šä¹‰ï¼Œä¸ä¼šè¿›è¡Œæˆªæ–æ“作。
内建命令 fc (å‚è§ä¸‹é¢çš„ shell (SHELL BUILTIN COMMANDS) ç« èŠ‚)
å¯ä»¥ç”¨æ¥åˆ—å‡ºæˆ–ä¿®æ”¹å¹¶é‡æ–°æ‰§è¡Œåކå²åˆ—表ä¸çš„一部分。内建命令 history
å¯ä»¥ç”¨æ¥æ˜¾ç¤ºæˆ–修改历å²åˆ—表,æ“ä½œåŽ†å²æ–‡ä»¶ã€‚å½“ä½¿ç”¨å‘½ä»¤è¡Œç¼–é™…ä¿æ ç¼–-
模å¼éƒ½æœ‰æœç´¢å‘½ä»¤ï¼Œæä¾›å¯¹åކå²åˆ—表的访问。
shell å…许控制哪些命令被ä¿å˜åˆ°åކå²åˆ—表ä¸ã€‚å¯ä»¥è®¾ç½® HISTCONTROL å’Œ
HISTIGNORE å˜é‡ï¼Œæ¥ä½¿å¾— shell åªä¿å˜è¾“入命令的一个å集。shell 选项 cmd-
hist 如果被å¯ç”¨ï¼Œå°†ä½¿å¾— shell
将多行的命令的æ¯ä¸€è¡Œä¿å˜åˆ°åŒä¸€ä¸ªåކ岿¡ç›®ä¸ï¼Œ
在需è¦çš„åœ°æ–¹æ·»åŠ åˆ†å·æ¥ä¿è¯è¯ä¹‰çš„æ£ç¡®æ€§ã€‚shell 选项 lithist 使得 shell
ä¿å˜å‘½ä»¤æ—¶ï¼Œä¿ç•™åµŒå…¥çš„æ–°è¡Œè€Œä¸æ˜¯ç”¨åˆ†å·ä»£æ›¿ã€‚å‚è§ä¸‹é¢ shell
(SHELL BUILTIN COMMANDS) ä¸ï¼Œå†…建命令 shopt
çš„æè¿°ï¼Œæœ‰å…³è®¾ç½®å’Œå–消 shell 选项的信æ¯ã€‚
shell 支æŒåކ岿‰©å±•机制,类似于 csh
ä¸åކ岿‰©å±•。这一节æè¿°äº†å¯ç”¨çš„è¯æ³•特å¾ã€‚在交互的 shell
ä¸è¿™ä¸€æœºåˆ¶è¢«é»˜è®¤å¯ç”¨ï¼Œ å¯ä»¥ä½¿ç”¨å†…建命令 set çš„ -H 选项æ¥ç¦ç”¨å®ƒ
(å‚è§ä¸‹é¢çš„ shell (SHELL BUILTIN COMMANDS) ç« èŠ‚)。éžäº¤äº’çš„
shell 默认ä¸è¿›è¡Œåކ岿‰©å±•。
åŽ†å²æ‰©å±•将历å²åˆ—表ä¸çš„è¯å¼•入输入æµä¸ï¼Œä½¿å¾—å¯ä»¥æ–¹ä¾¿åœ°é‡å¤å·²æ‰§è¡Œå‘½ä»¤ï¼Œ
在当å‰è¾“入行ä¸ä¸ºå‰ä¸€ä¸ªå‘½ä»¤æ’å…¥æ–°çš„å‚æ•°ï¼Œ
或者快速修æ£å‰ä¸€ä¸ªå‘½ä»¤ä¸çš„错误。
åŽ†å²æ‰©å±•在读入一整行åŽï¼Œåœ¨ shell 将它拆分æˆè¯ä¹‹å‰ç«‹å³è¿›è¡Œã€‚它
由两部分组æˆã€‚é¦–å…ˆæ˜¯åˆ¤æ–æ›¿æ¢ä¸ä½¿ç”¨åކå²åˆ—表ä¸å“ªä¸€è¡Œã€‚其次是选择那一行ä¸è¦åŒ…å«åˆ°å½“å‰è¡Œä¸çš„部分。
从历å²ä¸é€‰æ‹©çš„行称为 event,从那一行ä¸é€‰æ‹©çš„部分是 words。
å¯ä»¥ç”¨å¤šç§å¤šæ ·çš„ modifiers
æ¥æ“纵所选的è¯ã€‚åœ¨è¯»å…¥è¾“å…¥æ—¶ï¼Œè¡Œè¢«æŒ‰ç…§åŒæ ·æ–¹å¼åˆ†è§£æˆè¯ï¼Œ å› æ¤å¤šä¸ªä»¥
metacharacter 分隔的è¯ï¼Œå¦‚果被引å·åŒ…å«ï¼Œå°±è¢«å½“æˆä¸€ä¸ªè¯ã€‚
åŽ†å²æ‰©å±•ç”±åŽ†å²æ‰©å±•å—符引入,默认是 !ã€‚åªæœ‰åæ–œæ (\)
å’Œå•引å·å¯ä»¥å¼•ç”¨åŽ†å²æ‰©å±•å—符。
内建命令 shopt å¯ä»¥è®¾å®šå¤šä¸ªé€‰é¡¹å€¼ï¼Œæ¥è°ƒæ•´åކ岿‰©å±•的行为。如果 shell
选项 histverify 被å¯ç”¨ (å‚è§å†…建命令 shopt çš„æè¿°),并且æ£åœ¨ä½¿ç”¨ read-
lin, åŽ†å²æ›¿æ¢ä¸ä¼šè¢«ç«‹å³ä¼ ç»™ shell
解释器。与æ¤ç›¸å¯¹ï¼Œæ‰©å±•åŽçš„è¡Œè¢«é‡æ–°è½½å…¥ readline ç¼–-
缓冲区,进行进一æ¥çš„修改。如果æ£åœ¨ä½¿ç”¨ readlin,并且å¯ç”¨äº† shell 选项
histreedi, å¤±è´¥çš„åŽ†å²æ›¿æ¢å°†è¢«é‡æ–°è½½å…¥åˆ° readline ç¼–-
缓冲区,进行改æ£ã€‚内建命令 history çš„ -p
选项å¯ä»¥ç”¨æ¥åœ¨æ‰§è¡Œä¹‹å‰æŸ¥çœ‹åކ岿‰©å±•将如何进行。内建命令 history çš„ -s
选项å¯ä»¥ç”¨æ¥åœ¨åކå²åˆ—è¡¨æœ«å°¾æ·»åŠ å‘½ä»¤ï¼Œè€Œä¸çœŸæ£æ‰§è¡Œå®ƒä»¬ï¼Œä»Žè€Œ
在接下æ¥çš„调用ä¸å¯ä»¥ä½¿ç”¨å®ƒä»¬ã€‚
shell å…è®¸æŽ§åˆ¶åŽ†å²æ‰©å±•机制使用的多ç§å—符 (å‚è§ä¸Šé¢çš„ Shell Variables ä¸
histchars çš„æè¿°)。
Event Designators
事件指示器 (event designator) 是一个对历å²åˆ—è¡¨ä¸æŸä¸ªå‘½ä»¤è¡Œæ¡ç›®çš„引用。
! 开始一个命令替æ¢ï¼Œé™¤éžåŽé¢è·Ÿéšçš„æ˜¯ blank, newline, = 或是 (.
!n 引用命令行 n.
!-n 引用当å‰å‘½ä»¤è¡Œå‡åŽ» n.
!! 引用上一æ¡å‘½ä»¤ã€‚这是 `!-1' çš„åŒä¹‰è¯ã€‚
!string
引用最近的以 string 开始的命令。
!?string[?]
å¼•ç”¨æœ€è¿‘çš„åŒ…å« string 的命令。尾部的 ? å¯ä»¥è¢«å¿½ç•¥ï¼Œå¦‚æžœ string
之åŽç´§æŽ¥ç€ä¸€ä¸ªæ–°è¡Œç¬¦ã€‚
^string1^string2^
快速替æ¢ã€‚é‡å¤ä¸Šä¸€æ¡å‘½ä»¤ï¼Œå°† string1 替æ¢ä¸º string2. 与
``!!:s/string1/string2/'' ç‰ä»· (å‚è§ä¸‹é¢çš„ 符(Modifiers))。
!# 到æ¤ä¸ºæ¢è¾“入的整个命令行。
Word Designators
è¯æŒ‡ç¤ºå™¨ (word designator) 用于从 event ä¸é€‰æ‹©æœŸæœ›çš„è¯ã€‚ : 分隔 event
规则与 word 指示器。它å¯ä»¥å¿½ç•¥ï¼Œå¦‚æžœè¯æŒ‡ç¤ºå™¨ä»¥ ^, $, *, -, 或 %
开始。è¯è¢«ä»Žè¡Œé¦–开始编å·ï¼Œç¬¬ä¸€ä¸ªè¯è¢«è¡¨ç¤ºä¸º
0。æ’入当å‰è¡Œä¸çš„è¯ä»¥å•ä¸ªç©ºæ ¼åˆ†éš”ã€‚
0 (zero)
第 0 个è¯ã€‚对 shell æ¥å°†ï¼Œè¿™æ˜¯å‘½ä»¤å。
n 第 n 个è¯ã€‚
^ ç¬¬ä¸€ä¸ªå‚æ•°ã€‚也就是,第 1 个è¯ã€‚
$ 最åŽçš„傿•°ã€‚
% 最近一次æœç´¢ `?string?' 匹é…çš„è¯ã€‚
x-y 一组è¯ï¼›`-y' 是 `0-y' 的简写。
* 所有è¯ï¼Œé™¤äº†ç¬¬ 0 个。这是 `1-$' çš„åŒä¹‰è¯ã€‚如果 event
ä¸åªæœ‰ä¸€ä¸ªè¯ï¼Œä½¿ç”¨ * ä¹Ÿä¸æ˜¯é”™è¯¯ï¼›è¿™ç§æƒ…况下将返回空å—符串。
x* x-$ 的简写。
x- -$ çš„ç®€å†™ï¼Œå°±åƒ x* ä¸€æ ·ï¼Œä½†æ˜¯å¿½ç•¥æœ€åŽä¸€ä¸ªè¯ã€‚
如果给出了一个 word 指示器,没有给出 event 规则,å‰ä¸€ä¸ªå‘½ä»¤å°†ç”¨ä½œ
event。
符(Modifiers)
å¯é€‰çš„ word 指示器之åŽï¼Œå¯ä»¥å‡ºçŽ°ä¸€ä¸ªæˆ–å¤šä¸ªä¸‹è¿° modifiers
çš„åºåˆ—,æ¯ä¸€ä¸ªéƒ½å‰ç¼€æœ‰ `:'。
h åˆ é™¤æ–‡ä»¶å组æˆçš„尾部,åªä¿ç•™å¤´éƒ¨ã€‚
t åˆ é™¤æ–‡ä»¶å组æˆä¸å‰é¢çš„æˆåˆ†ï¼Œä¿ç•™å°¾éƒ¨ã€‚
r åˆ é™¤ .xxx å½¢å¼ä¸å°¾éƒ¨çš„åŽç¼€æˆåˆ†ï¼Œä¿ç•™åŸºæœ¬å称部分。
e åˆ é™¤æ‰€æœ‰å†…å®¹ï¼Œä¿ç•™å°¾éƒ¨çš„åŽç¼€ã€‚
p æ‰“å°æ–°çš„å‘½ä»¤ï¼Œä½†æ˜¯ä¸æ‰§è¡Œå®ƒã€‚
q å¼•ç”¨æ›¿æ¢æ‰€å¾—çš„è¯ï¼Œä½¿å®ƒä¸å†è¿›è¡Œæ›¿æ¢ã€‚
x å¼•ç”¨æ›¿æ¢æ‰€å¾—çš„è¯ï¼Œç±»ä¼¼ä¸Ž q, ä½†æ˜¯ä¼šæ ¹æ® blank
和新行符分解为è¯ã€‚
s/old/new/
将事件行ä¸å‡ºçŽ°çš„ç¬¬ä¸€ä¸ª old 替æ¢ä¸º new任何分隔符都å¯ä»¥ç”¨æ¥ä»£æ›¿
/,最åŽä¸€ä¸ªåˆ†éš”符是å¯é€‰çš„,如果它是事件行的最åŽä¸€ä¸ªå—符。 old å’Œ
new ä¸çš„分隔符å¯ä»¥ç”¨ä¸€ä¸ªåæ–œæ æ¥å¼•用。如果 & 出现在 new
ä¸ï¼Œå®ƒå°†æ›¿æ¢ä¸º old_ å¯ä»¥ç”¨å•ä¸ªåæ–œæ æ¥å¼•用 &。如果 old
ä¸ºç©ºï¼Œå®ƒå°†è®¾ç½®ä¸ºæœ€åŽæ›¿æ¢çš„ old_
或者,如果å‰é¢æ²¡æœ‰å‘ç”Ÿè¿‡åŽ†å²æ›¿æ¢ï¼Œå°±æ˜¯ !?string[?]
æœç´¢ä¸çš„æœ€åŽä¸€ä¸ª string_
& é‡å¤ä¸Šä¸€æ¬¡æ›¿æ¢ã€‚
g 使得改å˜è¢«æ•´ä¸ªäº‹ä»¶è¡Œæ‰€æŽ¥å—。用于与 `:s' 或 `:&' 结åˆ
(例如,`:gs/old/new/')。 如果与 `:s'
结åˆä½¿ç”¨ï¼Œä»»ä½•分隔符都å¯ä»¥ç”¨æ¥ä»£æ›¿ /,
最åŽä¸€ä¸ªåˆ†éš”符是å¯é€‰çš„,如果它是事件行的最åŽä¸€ä¸ªå—符。
除éžå¦å¤–è¯´æ˜Žï¼Œè¿™ä¸€ç« ä»‹ç»çš„å†…å»ºå‘½ä»¤å¦‚æžœæŽ¥å— - 引导的选项,那么它也接å—
-- ä½œä¸ºå‚æ•°ï¼Œæ¥æŒ‡ç¤ºé€‰é¡¹çš„结æŸ
: [arguments]
没有效果;这个命令除了扩展 arguments
并且作任何指定的é‡å®šå‘之外,ä¸åšä»»ä½•事。 退出时返回0。
. filename [arguments]
source filename [arguments]
读å–å¹¶åœ¨å½“å‰ shell çŽ¯å¢ƒä¸æ‰§è¡Œ filename ä¸çš„命令,返回 filename
䏿œ€åŽä¸€ä¸ªå‘½ä»¤çš„返回状æ€ã€‚如果 filename ä¸ä¸åŒ…嫿–œæ
(slash),系统将在 PATH 䏿Ÿ¥æ‰¾åŒ…å« filename 的目录。在 PATH
䏿œç´¢çš„æ–‡ä»¶ä¸å¿…æ˜¯å¯æ‰§è¡Œçš„。 如果 bash 䏿˜¯è¿è¡ŒäºŽ posix mode,当
PATH 䏿‰¾ä¸åˆ°æ–‡ä»¶æ—¶ä¼šåœ¨å½“å‰ç›®å½•æœç´¢ã€‚如果 shopt 内建命令的 sour-
cepath 选项被关é—, PATH å°†ä¸ä¼šè¢«æœç´¢ã€‚如果有任何 arguments
,它们æˆä¸º filename çš„ä½ç½®å‚æ•° (positional parameters),å¦åˆ™
ä½ç½®å‚æ•°ä¸å‘生å˜åŒ–。 è¿”å›žçŠ¶æ€æ˜¯è„šæœ¬ä¸æœ€åŽä¸€ä¸ªå‘½ä»¤é€€å‡ºæ—¶çš„状æ€ã€‚
没有执行命令则返回0,没有找到或ä¸èƒ½è¯»å– filename 时返回false。
alias [-p] [name[=value] ...]
Alias ä¸å¸¦å‚数或者带 -p 傿•°è¿è¡Œæ—¶å°†åœ¨æ ‡å‡†è¾“å‡ºä»¥è¿™æ ·çš„æ ¼å¼ alias
name=value 给出别å列表。 å¦‚æžœæœ‰å‚æ•°ï¼Œå°†åˆ›å»ºæä¾›äº† value çš„ name
的别å。 value
ä¸å°¾éƒ¨çš„ç©ºæ ¼ä½¿å¾—åˆ«å被扩展时,下一个è¯åšåˆ«å替æ¢ã€‚
å¯¹äºŽå‚æ•°åˆ—表ä¸çš„æ¯ä¸€ä¸ª name,如果 value 没有
给出,这个别åçš„å称和值会被打å°å‡ºæ¥ã€‚ Alias 返回 true é™¤éž name
没有定义为别å。
bg [jobspec]
ä½¿æŒ‚èµ·çš„ç¨‹åº jobspec 在åŽå°ç»§ç»æ‰§è¡Œï¼Œå°±å¥½åƒå®ƒæ˜¯ç”¨ &
å¯åŠ¨çš„ä¸€æ ·ã€‚å¦‚æžœæ²¡æœ‰æŒ‡å®š jobspec,shell æ„义上的 current job
襙 将被使用。 bg jobspec
返回0,除éžå½“å‰ç¦æ¢äº†ä½œä¸šæŽ§åˆ¶ï¼Œæˆ–者在å…许作业控制,但 是没有找到
jobspec ï¼Œæˆ–è€…å®ƒä¸æ˜¯åœ¨ä½œä¸šæŽ§åˆ¶ä¸‹å¯åŠ¨çš„æ—¶å€™ã€‚
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 键和功能的,将一个按键åºåˆ—和一个 readline
功能或å®è¿›è¡Œå…³è”,或者设置一个 readline
å˜é‡ã€‚æ¯ä¸€ä¸ªåœ¨éžé€‰é¡¹çš„傿•°éƒ½æ˜¯ä¸€ä¸ªå‘½ä»¤ï¼Œå¥½åƒå®ƒæ˜¯åœ¨ .inputrc
ä¸å‡ºçŽ°çš„ä¸€æ ·ã€‚ä½†æ˜¯æ¯ä¸ªå…³è”或者命令必须作为å•ç‹¬çš„å‚æ•°ä¼ 递;
ä¹Ÿå°±æ˜¯è¿™æ · '"\C-x\C-r": re-read-init-file'。
å¦‚æžœæœ‰å‚æ•°ï¼Œå®ƒä»¬æœ‰å¦‚下的æ„义:
-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 å˜é‡å’Œå€¼ã€‚
-s 以程åºå¯è¯»çš„æ–¹å¼æ˜¾ç¤º readline é”®åºåˆ—和对应的å®
-S 显示 readline å®å¯¹åº”的键åºåˆ—和他们输出的å—符串
-f filename
从 filename ä¸è¯»å–é”®åºåˆ—
-q function
查询那些键将执行function。
-u function
å–æ¶ˆæ‰€æœ‰å…³è”到 function 的键。
-r keyseq
å–æ¶ˆå½“å‰ä»»ä½• keyseq 的关è”。
-x keyseq:shell-command
使 shell-command 在 keyseq 按下时被执行。
返回值是0,除éžç»™å‡ºäº†ä¸€ä¸ªä¸èƒ½è¯†åˆ«çš„选项或是产生了一个错误。
break [n]
从一个 for, while, until, 或者 select 鸦å 顺觥 如果指定了 n
,就跳出 n 层鸦贰 n å¿…é¡» >= 1。如果 n 比当å‰-
环层数还è¦å¤§ï¼Œå°†è·³å‡ºæ‰€æœ‰é¸¦è´° 返回值是0ï¼Œé™¤éžæ‰§è¡Œ break 的时候
shell 䏿˜¯åœ¨æ‰§è¡Œä¸€ä¸ªé¸¦è´°
builtin shell-builtin [arguments]
执行指定的 shell å†…å»ºå‘½ä»¤ï¼Œä¼ é€’ arguments ,返回命令的返回值。
这在定义了一个和 shell 内建命令åŒå的函数时很有用,
在那个函数ä¸ä½¿ç”¨å®ƒæ¥æ‰§è¡Œç›¸åº”的功能。cd
å‘½ä»¤å¸¸ä»¥è¿™ç§æ–¹å¼é‡æ–°å®šä¹‰ã€‚ è¿”å›žçŠ¶æ€æ˜¯ false,如果指定的
shell-builtin 并䏿˜¯ä¸€ä¸ª shell 内建命令。
cd [-L|-P] [dir]
改å˜å½“å‰è·¯å¾„到 dir。这个å˜é‡çš„默认值是 HOME 目录。环境å˜é‡
CDPATH å®šä¹‰äº†åŒ…å« dir çš„æœç´¢è·¯å¾„。在 CDPATH
ä¸å¯é€‰çš„路径å以冒å·(:) 分隔。 CDPATH
ä¸çš„空路径å与当å‰è·¯å¾„相åŒï¼Œå°±æ˜¯ ``.''. 如果 胈 以斜æ
(/,slash) 起始,那么 CDPATH ä¸ä¼šè¢«ä½¿ç”¨ã€‚ -P
选项是说使用物ç†è·¯å¾„ç»“æž„è€Œä¸æ˜¯è·Ÿéšç¬¦å·é“¾æŽ¥ï¼Œ(å‚è§ set 命令ä¸çš„
-P 选项); -L 选项强制跟éšç¬¦å·é“¾æŽ¥ã€‚å¦å¤–,选项 - 与 $OLDPWD
是相åŒçš„。 返回值是 true ,如果æˆåŠŸåœ°æ”¹å˜äº†ç›®å½•ï¼›å¦åˆ™æ˜¯ false。
command [-pVv] command [arg ...]
è¿è¡Œ command ,使用 args ä½œä¸ºå‚æ•°ï¼Œç¦æ¢é€šå¸¸çš„æŸ¥æ‰¾ shell
å‡½æ•°çš„è¿‡ç¨‹ã€‚åªæœ‰å†…建命令或者 PATH ä¸åŒ…å«çš„命令å¯ä»¥æ‰§è¡Œã€‚如果给出
-p 傿•°ï¼Œ command 的查找是以 PATH
çš„é»˜è®¤å€¼è¿›è¡Œçš„ã€‚è¿™æ ·å¯ä»¥ä¿è¯æ‰¾åˆ°æ‰€æœ‰çš„æ ‡å‡†å·¥å…·ã€‚如果给出 -V 或者
-v 选项,关于 command 的说明将被打å°å‡ºæ¥ã€‚ -v
选项使得表述这个命令的è¯ï¼Œæˆ–è€…è¦æ‰§è¡Œ command
éœ€è¦æ‰§è¡Œçš„æ–‡ä»¶æ˜¾ç¤ºå‡ºæ¥ï¼› -V 选项给出更详细的æè¿°ã€‚如果给出 -V
或者 -v 选项,退出状æ€åœ¨æ‰¾åˆ°äº† command 的情况下0,没找到就是1。
如果没有æä¾›é€‰é¡¹ï¼Œå¹¶ä¸”产生了错误或者 command
没有找到,退出状æ€å°±æ˜¯127。å¦åˆ™ï¼Œ command å†…å»ºå‘½ä»¤çš„é€€å‡ºçŠ¶æ€æ˜¯
command 的退出状æ€ã€‚
compgen [option] [word]
æ ¹æ® option 为 word 产生å¯èƒ½çš„补全。option 是 内建命令 complete
接å—的任何选项,除了 -p å’Œ -r,将匹é…ç»“æžœå†™åˆ°æ ‡å‡†è¾“å‡ºã€‚ 当使用
-F 或 -C 选项时,å¯ç¼–程补全功能所设置的多数 shell
å˜é‡å¦‚æžœå˜åœ¨ï¼Œå…¶å€¼å°†ä¸å†æœ‰ç”¨ã€‚
产生的匹é…与å¯ç¼–ç¨‹è¡¥å…¨ä»£ç æ ¹æ®è¡¥å…¨è§„åˆ™åŠ ä¸Šç›¸åŒçš„æ ‡å¿—直接产生的结果相åŒã€‚
如果指定了 wordï¼Œåªæœ‰åŒ¹é… word 的补全结果将被显示出æ¥ã€‚
è¿”å›žå€¼ä¸ºçœŸï¼Œé™¤éžæä¾›äº†éžæ³•的选项,或者没有产生匹é…。
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 选项,
或者没有选项给出,现有的补全规则将被显示出æ¥ï¼Œä»¥ä¸€ç§å¯ä»¥é‡ç”¨ä¸ºè¾“å…¥
çš„æ ¼å¼æ˜¾ç¤ºã€‚-r 选项将一个针对æ¯ä¸ª name çš„è¡¥å…¨è§„åˆ™åˆ é™¤ã€‚
或者,如果没有给出 nameï¼Œå°†åˆ é™¤æ‰€æœ‰è¡¥å…¨è§„åˆ™ã€‚
å°è¯•è¯çš„è¡¥å…¨æ—¶ï¼Œåº”ç”¨è¿™äº›è¡¥å…¨è§„åˆ™çš„è¿‡ç¨‹åœ¨ä¸Šé¢ Programmable Com-
pletion(å¯ç¼–程补全) ä¸è¯¦è¿°ã€‚
其他选项,如果给出的è¯ï¼Œå…·æœ‰ä¸‹åˆ—æ„义。-G, -W, å’Œ -X é€‰é¡¹çš„å‚æ•°
(如果需è¦çš„è¯ï¼Œè¿˜åŒ…括 -P å’Œ -S 选项)
应当被引用,é¿å…在执行内建命令 complete 之å‰è¢«æ‰©å±•。
-o comp-option
comp-option æŽ§åˆ¶ç€ compspec
除了简å•地产生补全之外的多ç§è¡Œä¸ºã€‚ comp-option
å¯ä»¥æ˜¯å¦‚下之一:
default 使用 readline 的默认文件å补全,如果 compspec
没有得到匹é…。
dirnames
进行目录å补全,如果 compspec 没有得到匹é…。
filenames
告诉 readline,compspec
产生了文件å,使它å¯ä»¥è¿›è¡Œä»»ä½•文件å专用的处ç†
(例如,给目录ååŠ ä¸Šæ–œæ æˆ–消除尾部空白)。主è¦ç”¨äºŽ
shell 函数。
nospace 告诉 readline
ä¸è¦å‘补全的è¯åœ¨è¡Œçš„æœ€åŽæ·»åŠ ä¸€ä¸ªç©ºæ ¼
(这是默认行为)。
-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
特殊å˜é‡ä¸çš„å—ç¬¦ä½œä¸ºå®šç•Œç¬¦æ¥æ‹†åˆ†ï¼Œæ¯ä¸ªç»“果的è¯è¢«æ‰©å±•。å¯èƒ½çš„补全是结果列表
ä¸åŒ¹é…è¦è¡¥å…¨çš„è¯çš„那一些。
-C command
command 将在一个å shell
çŽ¯å¢ƒä¸æ‰§è¡Œï¼Œå®ƒçš„结果用作å¯èƒ½çš„补全。
-F function
shell 函数 function å°†åœ¨å½“å‰ shell
çŽ¯å¢ƒä¸æ‰§è¡Œã€‚å½“å®ƒç»“æŸæ—¶ï¼Œå¯èƒ½ 的补全å¯ä»¥ä»Žæ•°ç»„å…ƒç´ COM-
PREPLY ä¸å¾—到。
-X filterpat
filterpat
是一个模å¼ï¼Œç”¨äºŽæ–‡ä»¶å扩展。所有å‰é¢çš„é€‰é¡¹å’Œå‚æ•°äº§ç”Ÿ
çš„å¯èƒ½çš„补全都è¦ç«Ÿåº–å¾Šé…±æšæ³æ¡“銎ヅ filterpat
的补全都 被从列表ä¸åˆ 除。为 filterpat åŠ ä¸Šå‰å¯¼ !
ä½¿æ¨¡å¼æ„义相åï¼› è¿™ç§æƒ…况下,所有ä¸åŒ¹é… filterpat
的模å¼è¢«åˆ 除。
-P prefix
在所有其他选项都处ç†è¿‡ä¹‹åŽï¼Œprefix
è¢«åŠ åˆ°æ¯ä¸ªå¯èƒ½çš„补全å‰é¢ã€‚
-S suffix
在所有其他选项都处ç†è¿‡ä¹‹åŽï¼Œsuffix
è¢«åŠ åˆ°æ¯ä¸ªå¯èƒ½çš„补全åŽé¢ã€‚
返回值为真,除éžç»™å‡ºäº†éžæ³•的选项,给出除 -p å’Œ -r 之外
çš„æŸä¸ªé€‰é¡¹æ—¶æ²¡æœ‰ç»™å‡º name 傿•°ï¼Œè¯•å›¾åˆ é™¤ä¸€æ¡ name 的补全
规则但是规则ä¸å˜åœ¨ï¼Œæˆ–è€…æ·»åŠ è¡¥å…¨è§„åˆ™æ—¶å‡ºé”™ã€‚
continue [n]
å¤ä½åˆ°å¤–层 for, while, until, 或 select -
环的下一次开始。如果指定了 n_å¤ä½åˆ°å‘外第 n 层鸦返目肌 n
å¿…é¡» >= 1。如果 n 比外部鸦返牟闶啵次åé˜¶é’”ç æ„•难环
(``top-level'' loop,顶层鸦)。 返回值是 0ï¼Œé™¤éžæ‰§è¡Œ continue
时,shell 䏿˜¯åœ¨é¸¦åˆ†å°
declare [-afFirtx] [-p] [name[=value]]
typeset [-afFirtx] [-p] [name[=value]]
声明å˜é‡ä¸”/或设置它们的属性。如果没有给出 name 则显示å˜é‡çš„值。
选项 -p 将显示æ¯ä¸ªåç§° name 的属性和值。当使用 -p
时,其他选项被忽略。选项 -F
ç¦æ¢æ˜¾ç¤ºå‡½æ•°å®šä¹‰ï¼›åªæœ‰å‡½æ•°å和属性会被显示。 -F é€‰é¡¹æš—å« -f.
下列选项å¯ç”¨æ¥é™åˆ¶åªè¾“出具有指定属性的å˜é‡ï¼Œæˆ–者为å˜é‡è®¾ç½®å±žæ€§ï¼š
-a æ¯ä¸ª name 都是数组å˜é‡ (å‚è§ä¸Šé¢çš„ Arrays 段è½)。
-f åªä½¿ç”¨å‡½æ•°å。
-i å˜é‡è¢«å½“作一个整数;当å˜é‡è¢«èµ‹å€¼æ—¶å°†è¿›è¡Œç®—术è¿ç®— (å‚è§
值(ARITHMETIC EVALUATION) ç« èŠ‚)。
-r 使得 name
åªè¯»ã€‚这些åç§°ä¸èƒ½å†è¢«åŽç»çš„赋值è¯å¥èµ‹å€¼æˆ–å–æ¶ˆå®šä¹‰ã€‚
-t 设置æ¯ä¸ª name çš„ trace(跟踪) 属性。被跟踪的函数继承了
调用者 shell 的 DEBUG 陷阱。trace
属性对å˜é‡æ²¡æœ‰ç‰¹æ®Šæ„义。
-x æ ‡è®° name 为å¯ä»¥é€šè¿‡çŽ¯å¢ƒå¯¼å‡ºç»™åŽç»å‘½ä»¤ã€‚
使用 `+' 代替 `-' 将关é—属性,特殊情况是 +a ä¸èƒ½ç”¨äºŽé”€æ¯ä¸€ä¸ª
数组å˜é‡ã€‚å½“ç”¨äºŽå‡½æ•°ä¸æ—¶ï¼Œå®ƒä½¿å¾—æ¯ä¸ª name æˆä¸ºå±€éƒ¨çš„,就åƒ
使用了 local 命令。返回值是 0,除éžé‡åˆ°äº†éžæ³•的选项,试图使用
``-f foo=bar''
定义函数,试图å‘åªè¯»å˜é‡èµ‹å€¼ï¼Œè¯•图呿•°ç»„å˜é‡èµ‹å€¼ä½†æ²¡æœ‰ä½¿ç”¨å¤åˆçš„赋值
è¯æ³• (å‚è§ä¸Šé¢çš„ Arrays 段è½),name 之䏀䏿˜¯æœ‰æ•ˆçš„ shell
å˜é‡å,试图将数组å˜é‡çš„æ•°ç»„ 状æ€å…³é—,或者是试图使用 -f
显示一个ä¸å˜åœ¨çš„函数。
dirs [-clpv] [+n] [-n]
没有选项时显示当å‰ä¿å˜çš„目录。默认输出为一行,目录åç”¨ç©ºæ ¼åˆ†å¼€ã€‚
å¯ä»¥ä½¿ç”¨ pushd å‘½ä»¤å°†ç›®å½•æ·»åŠ åˆ°åˆ—è¡¨ï¼Œ popd
命令将列表ä¸çš„æ¡ç›®åˆ é™¤ã€‚
+n 显示 dirs 在ä¸å¸¦é€‰é¡¹æ‰§è¡Œæ—¶æ˜¾ç¤ºçš„列表的第 n 个æ¡ç›®ï¼Œä»Ž 0
开始自左算起。
-n 显示 dirs 在ä¸å¸¦é€‰é¡¹æ‰§è¡Œæ—¶æ˜¾ç¤ºçš„列表的第 n 个æ¡ç›®ï¼Œä»Ž 0
开始自å³ç®—起。
-c åˆ é™¤æ‰€æœ‰æ¡ç›®ï¼Œæ¸…ç©ºç›®å½•æ ˆã€‚
-l äº§ç”Ÿé•¿åˆ—è¡¨ï¼›é»˜è®¤åˆ—è¡¨æ ¼å¼ä½¿ç”¨æ³¢æµªçº¿æ¥è¡¨ç¤ºä¸ªäººç›®å½•。
-p è¾“å‡ºç›®å½•æ ˆï¼Œä¸€è¡Œä¸€ä¸ªã€‚
-v è¾“å‡ºç›®å½•æ ˆï¼Œä¸€è¡Œä¸€ä¸ªï¼Œæ¯ä¸ªæ¡ç›®å‰é¢åŠ ä¸Šå®ƒåœ¨æ ˆä¸çš„ä½ç½®ç´¢å¼•。
返回值是 0,除éžç»™å‡ºäº†éžæ³•çš„å‚æ•°ï¼Œæˆ–者 n
ç´¢å¼•è¶…å‡ºäº†ç›®å½•æ ˆçš„èŒƒå›´ã€‚
disown [-ar] [-h] [jobspec ...]
没有选项时,æ¯ä¸ª jobspec 被从æ£åœ¨è¿è¡Œçš„作业表ä¸åˆ 除。如果给出了
- 选项,æ¯ä¸ª jobspec å¹¶ä¸ä»Žè¡¨ä¸åˆ é™¤ï¼Œè€Œæ˜¯è¢«æ ‡è®°ï¼Œä½¿å¾—åœ¨ shell
接到 SIGHUP ä¿¡å·æ—¶ï¼Œä¸ä¼šå‘作业å‘出 SIGHUP ä¿¡å·ã€‚如果没有给出
jobspec_也没有给出 -a 或者 -r 选项,将使用当å‰ä½œä¸š (current
job)。如果没有给出 jobspec_ 选项 -a
æ„味ç€åˆ é™¤æˆ–æ ‡è®°æ‰€æœ‰ä½œä¸šï¼›é€‰é¡¹ -r ä¸å¸¦ jobspec
傿•°æ—¶é™åˆ¶æ“作åªå¯¹æ£åœ¨è¿è¡Œçš„作业进行。返回值是 0ï¼Œé™¤éž jobspec
䏿Œ‡å®šæœ‰æ•ˆçš„作业。
echo [-neE] [arg ...]
输出 argï¼Œä»¥ç©ºæ ¼åˆ†å¼€ï¼Œæœ€åŽåŠ ä¸€ä¸ªæ–°è¡Œç¬¦ã€‚è¿”å›žå€¼æ€»æ˜¯ 0。
如果指定了 -n,将ä¸åœ¨å°¾éƒ¨æ·»åŠ æ–°è¡Œç¬¦ã€‚å¦‚æžœç»™å‡ºäº† -e 选项,
å°†å…è®¸è§£é‡Šä¸‹åˆ—åæ–œæ 转义的å—符。 -E
é€‰é¡¹ç¦æ¢è¿™äº›è½¬ä¹‰å—符的解释,å³ä½¿åœ¨é»˜è®¤è§£é‡Šå®ƒä»¬çš„系统ä¸ä¹Ÿæ˜¯å¦‚æ¤ã€‚
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 一个八比特å—符,它的值是八进制值 nnn
(零到三个八进制数å—)。
\nnn 一个八比特å—符,它的值是八进制值 nnn
(一到三个八进制数å—)。
\xHH 一个八比特å—符,它的值是åå…进制值 HH
(一到两个åå…进制数å—)。
enable [-adnps] [-f filename] [name ...]
å…è®¸æˆ–ç¦æ¢ shell
å†…å»ºå‘½ä»¤ã€‚ç¦æ¢ä¸€ä¸ªå†…建命令使得ç£ç›˜ä¸Šçš„与内建命令åŒå
的文件得以è¿è¡Œï¼Œä¸å¿…使用它的全路径,å³ä½¿ shell
一般在æœç´¢ç£ç›˜ä¸Šçš„å‘½ä»¤ä¹‹å‰ æœç´¢å†…建命令。如果使用了 -n
选项,æ¯ä¸ª name éƒ½è¢«ç¦æ¢ï¼›å¦åˆ™ï¼Œ name 被å…许。例如,è¦ä½¿ç”¨ PATH
䏿œç´¢åˆ°çš„ test å‘½ä»¤è€Œä¸æ˜¯ shell 内建的那一个,å¯ä»¥è¿è¡Œ ``enable
-n test''. 选项 -f æ„味ç€ä»Žå…±äº«åº“ filename ä¸åŠ è½½æ–°çš„å†…å»ºå‘½ä»¤
name_ 如果系统支æŒåЍæ€åŠ è½½çš„è¯ã€‚选项 -d å°†åˆ é™¤æ›¾å±… -f
åŠ è½½çš„å†…å»ºå‘½ä»¤ã€‚å¦‚æžœæ²¡æœ‰ç»™å‡º name 傿•°ï¼Œæˆ–者给出了 -p
选项,将显示 shell å†…å»ºå‘½ä»¤çš„åˆ—è¡¨ã€‚å¦‚æžœæ²¡æœ‰å…¶ä»–é€‰é¡¹å‚æ•°ï¼Œ
这个列表åªåŒ…嫿‰€æœ‰è¢«å…许的 shell 内建命令;如果给出了
-nï¼Œå°†åªæ˜¾ç¤ºè¢«ç¦æ¢çš„内建命令;如果给出了
-a,显示的列表ä¸åŒ…嫿‰€æœ‰å†…建命令,还有命令是å¦è¢«å…许的指示;
如果给出了 -s,输出被é™åˆ¶ä¸º POSIX special 内建命令。 返回值是
0ï¼Œé™¤éž name 䏿˜¯ shell
内建命令,或者从共享库ä¸åŠ è½½æ–°çš„å†…å»ºå‘½ä»¤æ—¶å‡ºé”™ã€‚
eval [arg ...]
arg 被读å–并连结为å•一的命令。这个命令然åŽè¢« shell 读å–并执行,
它的退出状æ€è¢«ä½œä¸º eval 的值返回。如果没有 args,
或仅仅包å«ç©ºå‚数, eval 返回 0。
exec [-cl] [-a name] [command [arguments]]
如果指定了 command_å®ƒå°†æ›¿æ¢ shell。ä¸ä¼šäº§ç”Ÿæ–°çš„进程。 argu-
ments æˆä¸º command çš„å‚æ•°ã€‚如果给出了 -l 选项,shell å°†åœ¨ä¼ é€’ç»™
command 的第 0 ä¸ªå‚æ•°å‰é¢åŠ ä¸Šä¸€ä¸ªè¿žå—符 (dash,`-')ã€‚è¿™æ ·åšå’Œ
login(1) 相åŒã€‚选项 -c 使得命令 command
åœ¨ä¸€ä¸ªç©ºçŽ¯å¢ƒä¸æ‰§è¡Œã€‚如果给出了 -, shell 会将 name 作为第 0
ä¸ªå‚æ•°ä¼ é€’ç»™è¦æ‰§è¡Œçš„命令。如果由于æŸç§ç ¸ as the zeroth argument
to the executed command. If command ä¸èƒ½è¢«æ‰§è¡Œï¼Œéžäº¤äº’çš„ shell
å°†é€€å‡ºï¼Œé™¤éž shell 选项 execfail
被设置为å…è®¸ï¼Œè¿™ç§æƒ…况下它返回失败。如果命令ä¸èƒ½æ‰§è¡Œï¼Œäº¤äº’çš„
shell 返回失败。 如果没有指定 command 任何é‡å®šå‘å¯¹å½“å‰ shell
å‘生作用,返回值是 0。如果å‘生é‡å®šå‘é”™è¯¯ï¼Œè¿”å›žçŠ¶æ€æ˜¯ 1。
exit [n]
使得 shell 以状æ€å€¼ n 退出。如果忽略了 n_
é€€å‡ºçŠ¶æ€æ˜¯æœ€åŽæ‰§è¡Œçš„命令的退出状æ€ã€‚在 shell 终æ¢å‰ï¼Œå¯¹ EXIT
的陷阱将被执行。
export [-fn] [name[=word]] ...
export -p
给出的åç§° names
è¢«æ ‡è®°ä¸ºè‡ªåŠ¨åœ°å¯¼å‡ºåˆ°åŽç»æ‰§è¡Œçš„命令的环境ä¸ã€‚如果给出了 -f
选项,åç§° names 指的是函数。如果没有给出 names或者如果给出了
-p 选项,将打å°åœ¨è¿™ä¸ª shell ä¸è¢«å¯¼å‡ºçš„æ‰€æœ‰åå—的列表。选项 -n
使得以æ¤ä¸ºåçš„å˜é‡çš„å¯¼å‡ºå±žæ€§è¢«åˆ é™¤ã€‚ export 返回
0,除éžé‡åˆ°äº†éžæ³•的选项,name 之䏀䏿˜¯æœ‰æ•ˆçš„ shell å˜é‡å,
或者给出了 -f 选项,而 name 䏿˜¯ä¸€ä¸ªå‡½æ•°ã€‚
fc [-e ename] [-nlr] [first] [last]
fc -s [pat=rep] [cmd]
命令修å¤ã€‚第一ç§å½¢å¼ä¸ï¼Œåކå²åˆ—表ä¸ä»Ž first 到 last
范围内的命令都被选å–。 First å’Œ last å¯ä»¥æŒ‡å®šä¸ºå—符串
(å¯ä»¥å®šä½æœ€åŽä¸€ä¸ªä»¥æ¤å—符串开始的命令) æˆ–è€…æ•°å— (历å²åˆ—表ä¸
的索引,负数被当作相对当å‰å‘½ä»¤å·çš„åç§»)。如果没有指定 last_
它在列举时被设为当å‰å‘½ä»¤ (å› æ¤ ``fc -l -10'' å°†è¾“å‡ºæœ€åŽ 10
æ¡å‘½ä»¤),其他情况下被设为 first如果没有指定 first_它在编-
时被设为å‰ä¸€ä¸ªå‘½ä»¤ï¼Œåˆ—举是设为 -16。
选项 -n ä½¿å¾—åˆ—ä¸¾æ—¶ä¸æ˜¾ç¤ºå‘½ä»¤å·ç 。选项 -r
将命令顺åºè¿›è¡ŒæŽ‰æ¢ã€‚如果给出了 -l
é€‰é¡¹ï¼Œå‘½ä»¤å°†åˆ—ä¸¾åœ¨æ ‡å‡†è¾“å‡ºä¸Šã€‚å¦åˆ™ï¼Œå°†å¯åЍ ename 给出的编-
器,编åŠåº‘┟畹奈募。如果没有给出 ename_ 将使用å˜é‡
FCEDIT 的值,如果 FCEDIT 没有定义就使用 EDITOR
的值。如果ä»ç„¶æ²¡æœ‰å®šä¹‰ï¼Œå°†ä½¿ç”¨ vi_ 编冀崾螅æ§å—‰-
的命令将回显并执行。
第二ç§å½¢å¼ä¸ï¼Œcommand 在æ¯ä¸ª pat 的实例被 rep 替æ¢åŽ
éƒ½è¢«é‡æ–°æ‰§è¡Œã€‚使用这ç§ç‰¹æ€§æ—¶å¯ä»¥èµ·ä¸€ä¸ªæœ‰ç”¨çš„别å: ``r=fc -s'',
è¿™æ ·è¾“å…¥ ``r cc'' å°†è¿è¡Œæœ€åŽçš„以 ``cc'' 开头的命令,输入 ``r''
将釿–°æ‰§è¡Œä¸Šä¸€ä¸ªå‘½ä»¤ã€‚
如果使用第一ç§å½¢å¼ï¼Œè¿”回值是 0,除éžé‡åˆ°äº†éžæ³•的选项,或 first
或 last 指定的历å²è¡Œæ•°è¶…出了范围。如果给出了 -e
é€‰é¡¹ï¼Œè¿”å›žå€¼æ˜¯æœ€åŽæ‰§è¡Œçš„å‘½ä»¤çš„è¿”å›žå€¼ï¼Œæˆ–ç€æ˜¯å¤±è´¥ï¼Œå¦‚果临时文件ä¸çš„命令
执行出错。如果使用第二ç§å½¢å¼ï¼Œè¿”å›žçŠ¶æ€æ˜¯é‡æ–°æ‰§è¡Œçš„å‘½ä»¤ï¼Œé™¤éž cmd
没有指定一个有效的历å²è¡Œï¼Œè¿™ç§æƒ…况下 fc 返回失败。
fg [jobspec]
å°† jobspec æ¢å¤è‡³å‰å°ï¼Œä½¿å®ƒæˆä¸ºå½“å‰ä½œä¸šã€‚如果 jobspec
ä¸å˜åœ¨ï¼Œå°†ä½¿ç”¨ shell æ„义上的当å‰ä½œä¸š current job。返回值是
被放到å‰å°çš„命令的状æ€ï¼Œæˆ–者是失败,如果在ç¦ç”¨ä½œä¸šæŽ§åˆ¶æ—¶è¿è¡Œï¼Œæˆ–者
在å¯ç”¨ä½œä¸šæŽ§åˆ¶æ—¶è¿è¡Œï¼Œä½† jobspec 没有指定有效的作业,或 jobspec
指定了没有使用作业控制的作业。
getopts optstring name [args]
getopts ç”± shell 程åºç”¨æ¥å¤„ç†ä½ç½®å‚数。 optstring
包å«è¦è¯†åˆ«çš„选项å—符;如果æŸä¸ªå—符跟éšç€å†’å·ï¼Œé‚£ä¹ˆè¿™ä¸ªé€‰é¡¹éœ€è¦ä¸€ä¸ªå‚数,
需è¦ç”¨ç©ºç™½å’Œå®ƒéš”离开。冒å·å’Œé—®å·å—符ä¸èƒ½ç”¨ä½œé€‰é¡¹å—ç¬¦ã€‚æ¯æ¬¡å®ƒæ‰§è¡Œæ—¶ï¼Œ
getopts 将下一个选项放在 shell å˜é‡ name ä¸ï¼Œå¦‚æžœ name
ä¸å˜åœ¨å°±åˆå§‹åŒ–它;下一个è¦å¤„ç†çš„傿•°çš„索引放在å˜é‡ OPTIND
ä¸ã€‚æ¯æ¬¡ shell 或 shell 脚本被执行的时候 OPTIND 被åˆå§‹åŒ–为
1。当æŸä¸ªé€‰é¡¹éœ€è¦å‚数时, getopts å°†é‚£ä¸ªå‚æ•°æ”¾åˆ°å˜é‡ OPTARG
ä¸ã€‚shell ä¸ä¼šè‡ªåЍé‡ç½® OPTINï¼› 在相åŒçš„ shell
ä¸ï¼Œå¦‚æžœè¦ä½¿ç”¨æ–°çš„傿•°é›†åˆè€Œéœ€è¦å¤šæ¬¡è°ƒç”¨ getopts
时,必须手动é‡ç½®å®ƒã€‚
当é‡åˆ°é€‰é¡¹ç»“æŸçš„æ—¶å€™ï¼Œgetopts 以大于 0 的值退出。 OPTIND
被设置为第一个éžé€‰é¡¹çš„傿•°çš„索引,name 被设置为 ?。
getopts 通常解释ä½ç½®å‚数,但是如果 args ä¸ç»™å‡ºäº†æ›´å¤šå‚数,
getopts 将解释它们。
getopts èƒ½ä»¥ä¸¤ç§æ–¹å¼æŠ¥å‘Šé”™è¯¯ã€‚如果 optstring
的第一个å—符是冒å·ï¼Œå°†ä½¿ç”¨ silent
安é™çš„错误报告。通常的æ“作ä¸ï¼Œé‡åˆ°éžæ³•é€‰é¡¹æˆ–ç¼ºå°‘é€‰é¡¹çš„å‚æ•°æ—¶å°†æ‰“å°å‡º
诊æ–ä¿¡æ¯ã€‚如果å˜é‡ OPTERR 被设置为 0,ä¸ä¼šæ˜¾ç¤ºé”™è¯¯æ¶ˆæ¯ï¼Œå³ä½¿
optstring 的第一个å—ç¬¦ä¸æ˜¯å†’å·ã€‚
如果å‘çŽ°äº†ä¸€ä¸ªéžæ³•的选项, getopts å‘ name ä¸ç½®å…¥
?ï¼Œå¹¶ä¸”å¦‚æžœä¸æ˜¯å®‰é™æ¨¡å¼çš„è¯ï¼Œæ‰“å°é”™è¯¯æ¶ˆæ¯å¹¶å–消 OPTARG
的定义。如果 getopts æ˜¯å®‰é™æ¨¡å¼ï¼Œæ‰¾åˆ°çš„选项å—符将置入 OPTAR,
ä¸ä¼šæ‰“å°è¯Šæ–消æ¯ã€‚
如果没有找到需è¦çš„傿•°ï¼Œå¹¶ä¸” 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
使得输出以一ç§å¯ä»¥é‡ç”¨ä¸ºè¾“å…¥çš„æ ¼å¼æ˜¾ç¤ºã€‚å¦‚æžœæ²¡æœ‰ç»™å‡ºå‚æ•°ï¼Œ
或者åªç»™å‡ºäº† -l 选项,已记录的命令的信æ¯å°†è¢«æ‰“å°å‡ºæ¥ã€‚
è¿”å›žçœŸï¼Œé™¤éž name æ²¡æœ‰æ‰¾åˆ°æˆ–ç»™å‡ºäº†éžæ³•的选项。
help [-s] [pattern]
显示关于内建命令的有用的信æ¯ã€‚如果指定了 pattern ( )_help
ç»™å‡ºå…³äºŽæ‰€æœ‰åŒ¹é… pattern
的命令的详细帮助;å¦åˆ™æ‰€æœ‰å†…建命令的帮助和 shell
控制结构将被打å°å‡ºæ¥ã€‚ 选项 -s é™åˆ¶ä¿¡æ¯æ˜¾ç¤ºä¸ºç®€çŸçš„用法概è¦ã€‚
返回 0ï¼Œé™¤éžæ²¡æœ‰åŒ¹é… pattern 的命令。
history [n]
history -c
history -d offset
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]
ä¸å¸¦é€‰é¡¹çš„è¯ï¼Œæ˜¾ç¤ºå¸¦è¡Œå·çš„命令历å²åˆ—表。列出的行ä¸å«æœ‰ * 的已-
è¢«ä¿®æ”¹è¿‡ã€‚å‚æ•° n ä½¿å¾—åªæ˜¾ç¤ºæœ€åŽ n 行。如果给出了 file-
name,它被用åšåކ岿–‡ä»¶å;没有的è¯ï¼Œå°†ä½¿ç”¨ HISTFILE
çš„å€¼ä½œä¸ºåŽ†å²æ–‡ä»¶å。选项如果给出,则具有下列æ„义:
-c 清空历å²åˆ—è¡¨ï¼Œåˆ é™¤æ‰€æœ‰æ¡ç›®ã€‚
-d offset
åˆ é™¤ offset ä½ç½®çš„åŽ†å²æ¡ç›®ã€‚
-a å°† ``æ–°'' çš„åŽ†å²æ¡ç›® (è‡ªå½“å‰ bash 会è¯å¼€å§‹è¾“入的历å²å‘½ä»¤)
è¿½åŠ åˆ°åŽ†å²æ–‡ä»¶ä¸ã€‚
-n å°†å°šæœªä»ŽåŽ†å²æ–‡ä»¶ä¸è¯»å–çš„åŽ†å²æ¡ç›®è¯»å…¥å½“å‰åކå²åˆ—表。这些行是当å‰
bash 会è¯å¼€å§‹ä¹‹åŽï¼Œæ‰è¿½åŠ åˆ°åŽ†å²æ–‡ä»¶ä¸çš„行。
-r 读å–åŽ†å²æ–‡ä»¶çš„内容,使用它们作为当å‰åކå²ã€‚
-w 将当å‰åކå²åˆ—è¡¨å†™å…¥åŽ†å²æ–‡ä»¶ï¼Œè¦†ç›–åŽ†å²æ–‡ä»¶çš„æ‚å¿ƒè°Œè¨
-p 对åŽç»çš„ args è¿›è¡ŒåŽ†å²æ›¿æ¢ï¼Œåœ¨æ ‡å‡†è¾“出上显示结果。
ä¸ä¼šå°†ç»“æžœå˜å…¥åކå²åˆ—表。æ¯ä¸ª args 都必须被引用,æ¥ç¦æ¢
普通的命令扩展。
-s å°† args
ä¿å˜åˆ°åކå²åˆ—表ä¸ï¼Œä½œä¸ºå•独的æ¡ç›®ã€‚历å²åˆ—表ä¸çš„æœ€åŽä¸€ä¸ªå‘½ä»¤åœ¨æ·»åŠ
args 之å‰è¢«åˆ 除。
返回 0,除éžé‡åˆ°äº†éžæ³•的选项,读/å†™åŽ†å²æ–‡ä»¶å‘生错误,在 -d çš„
傿•°ä¸ç»™å‡ºäº†æ— 效的 offset,或者对 -p
çš„åŽç»å‚æ•°è¿›è¡ŒåŽ†å²æ‰©å±•失败。
jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]
第一ç§å½¢å¼åˆ—出æ£åœ¨è¿è¡Œçš„作业。选项具有下列æ„义:
-l 普通信æ¯ä¹‹å¤–,列出进程ID。
-p åªåˆ—出作业的进程组 leader 的进程ID。
-n åªæ˜¾ç¤ºä»Žä¸Šæ¬¡ç”¨æˆ·å¾—知它们的状æ€ä¹‹åŽï¼Œçжæ€å‘生改å˜çš„作业的信æ¯ã€‚
-r é™åˆ¶åªè¾“出æ£åœ¨è¿è¡Œçš„作业。
-s é™åˆ¶åªè¾“å‡ºåœæ¢çš„作业。
如果给出了 jobspec 输出被é™åˆ¶ä¸ºä»…æ¤ä½œä¸šçš„ä¿¡æ¯ã€‚ 返回
0,除éžé‡åˆ°äº†éžæ³•çš„é€‰é¡¹æˆ–ç»™å‡ºäº†éžæ³•çš„ jobspec_
如果给出了 -x 选项,作业 jobs å°† command 或 args ä¸çš„任何 job-
spec 替æ¢ä¸ºç›¸åº”的进程组ID,执行 command_ ä¼ é€’å‚æ•° args
给它并返回它的退出状æ€ã€‚
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l [sigspec | exit_status]
å‘以 pid 或 jobspec 为å的进程å‘é€å为 sigspec 或 signum
的信å·ã€‚ sigspec å¯ä»¥æ˜¯ä¸€ä¸ªä¿¡å·å称,类似 SIGKILL 或信å·ç¼–å·ï¼›
signum 是一个信å·ç¼–å·ã€‚如果 sigspec
是一个信å·å称,那么å¯ä»¥æœ‰ï¼Œä¹Ÿå¯ä»¥æ²¡æœ‰ SIG å‰ç¼€ã€‚如果没有给出
sigspec_ 那么å‡è®¾æ˜¯ SIGTER。 傿•° -l
将列出所有信å·çš„å称。如果给出 -l
æ—¶è¿˜æœ‰ä»»ä½•å‚æ•°ï¼Œå°†åˆ—å‡ºå‚æ•°å¯¹åº”的信å·åç§°ï¼Œè¿”å›žçŠ¶æ€ 0。 -l çš„
exit_status 傿•°æ˜¯ä¸€ä¸ªæ•°å—,指定了一个信å·ç¼–å·æˆ–被信å·
终æ¢çš„进程的退出状æ€å€¼ã€‚ kill
返回真,如果至少æˆåŠŸå‘é€äº†ä¸€ä¸ªä¿¡å·ï¼Œæˆ–者返回å‡ï¼Œå¦‚æžœå‘生了错误或é‡åˆ°äº†
éžæ³•的选项。
let arg [arg ...]
æ¯ä¸ª arg éƒ½æ˜¯è¦æ±‚å€¼çš„ç®—æœ¯è¡¨è¾¾å¼ (å‚è§ å€¼(ARITHMETIC EVAL-
UATION) ç« èŠ‚)。如果最åŽä¸€ä¸ªå‚æ•° arg 求值结果是 0, let 返回
1ï¼›å¦åˆ™è¿”回 0。
local [option] [name[=value] ...]
对æ¯ä¸ªå‚数将创建一个å为 name 的局部å˜é‡å¹¶èµ‹äºˆå€¼ valueoption
å¯ä»¥æ˜¯ä»»ä½• declare 接å—的值。当 local 用于函数内部时,它使得å˜é‡
name 作用域局é™äºŽå‡½æ•°å’Œå®ƒçš„å进程。没有æ“作数时, local
将局部å˜é‡çš„åˆ—è¡¨å†™åˆ°æ ‡å‡†è¾“å‡ºã€‚ä¸åœ¨å‡½æ•°å†…部使用 local
会导致出错。返回 0,除éžåœ¨å‡½æ•°ä¹‹å¤–使用了 loca, ç»™å‡ºäº†éžæ³•çš„
name或者 name 是一个åªè¯»çš„å˜é‡ã€‚
logout 退出登录 shell。
popd [-n] [+n] [-n]
ä»Žç›®å½•æ ˆä¸åˆ 除æ¡ç›®ã€‚æ²¡æœ‰å‚æ•°çš„è¯ï¼Œä»Žæ ˆä¸åˆ 除顶层目录,执行 cd
切æ¢åˆ°æ–°çš„é¡¶å±‚ç›®å½•ã€‚å¦‚æžœç»™å‡ºäº†å‚æ•°ï¼Œæœ‰ä¸‹åˆ—çš„å«ä¹‰ï¼š
+n åˆ é™¤ dirs 给出的列表ä¸ä»Žå·¦æ•°ç¬¬ n 个æ¡ç›® (从 0
ç®—èµ·)。例如: ``popd +0'' åˆ é™¤ç¬¬ä¸€ä¸ªç›®å½•ï¼Œ ``popd +1''
第二个。
-n åˆ é™¤ dirs 给出的列表ä¸ä»Žå³æ•°ç¬¬ n 个æ¡ç›® (从 0
ç®—èµ·)。例如: ``popd -0'' åˆ é™¤æœ€åŽä¸€ä¸ªç›®å½•, ``popd -1''
åˆ é™¤å€’æ•°ç¬¬äºŒä¸ªã€‚
-n 阻æ¢ä»Žæ ˆä¸åˆ é™¤ç›®å½•ä¹‹åŽæ”¹å˜ç›®å½•,这时åªå¯¹æ ˆè¿›è¡Œæ“作。
如果命令 popd æˆåŠŸï¼Œè¿˜è¦æ‰§è¡Œä¸€ä¸ª dir, 返回 0。 popd
返回å‡ï¼Œå¦‚æžœé‡åˆ°äº†éžæ³•çš„é€‰é¡¹ï¼Œç›®å½•æ ˆä¸ºç©ºï¼ŒæŒ‡å®šäº†ç›®å½•æ ˆä¸ä¸å˜åœ¨çš„æ¡ç›®ï¼Œ
或者改å˜ç›®å½•失败。
printf format [arguments]
在 format æŽ§åˆ¶ä¸‹å°†æ ¼å¼åŒ–çš„ arguments å†™åˆ°æ ‡å‡†è¾“å‡ºã€‚ format
是一个å—符串,包å«ä¸‰ç§ç±»åž‹çš„对象:普通å—符,被简å•地
å¤åˆ¶åˆ°æ ‡å‡†è¾“出,转义å—符,被转æ¢å¹¶å¤åˆ¶åˆ°æ ‡å‡†è¾“å‡ºï¼Œæ ¼å¼è¯´æ˜Žï¼Œæ¯ä¸€ä¸ª
都使得相邻的下一个 argument 被打å°å‡ºæ¥ã€‚ åœ¨æ ‡å‡†çš„ printf(1)
æ ¼å¼ä¹‹å¤–,%b 使得 printf 展开相应 arguments
ä¸çš„åæ–œæ 转义åºåˆ—,%q 使得 printf å°† 相应的 argument
以一ç§å¯ä»¥é‡ç”¨ä¸º shell è¾“å…¥çš„æ ¼å¼è¾“出。
format åœ¨éœ€è¦æ—¶è¢«é‡ç”¨ï¼Œä»¥å¤„ç†æ‰€æœ‰çš„ arguments。 如果 format
éœ€è¦æ¯”所æä¾›çš„æ›´å¤šçš„ arguments, å¤šå‡ºçš„æ ¼å¼è¯´æ˜Žè§†ä¸ºå·²-
æä¾›äº†ç›¸åº”çš„ 0 值或空å—符串。 æˆåŠŸçš„è¯è¿”回值是 0ï¼Œå¤±è´¥åˆ™æ˜¯éž 0
值。
pushd [-n] [dir]
pushd [-n] [+n] [-n]
å°†ç›®å½•æŽ¨å…¥ç›®å½•æ ˆï¼Œæˆ–è€…è½®æ¢æ ˆä¸çš„å†…å®¹ï¼Œä½¿æ ˆçš„é¡¶éƒ¨æˆä¸ºå½“å‰å·¥ä½œç›®å½•。
æ²¡æœ‰å‚æ•°æ—¶ï¼Œäº¤æ¢é¡¶éƒ¨ä¸¤ä¸ªç›®å½•,返回
0,除éžç›®å½•æ ˆä¸ºç©ºã€‚å¦‚æžœç»™å‡ºäº†å‚æ•°ï¼Œ 它们有如下å«ä¹‰ï¼š
+n è½®æ¢æ ˆä¸å†…容,使得 dirs 给出的列表ä¸ä»Žå·¦æ•°ç¬¬ n 个目录 (从
0 æ•°èµ·) æˆä¸ºç›®å½•æ ˆçš„é¡¶éƒ¨ã€‚
-n è½®æ¢æ ˆä¸å†…容,使得 dirs 给出的列表ä¸ä»Žå³æ•°ç¬¬ n 个目录 (从
0 æ•°èµ·) æˆä¸ºç›®å½•æ ˆçš„é¡¶éƒ¨ã€‚
-n 阻æ¢å‘æ ˆä¸æ·»åŠ ç›®å½•ä¹‹åŽæ”¹å˜ç›®å½•,这时åªå¯¹æ ˆè¿›è¡Œæ“作。
dir æ·»åŠ dir åˆ°æ ˆé¡¶ï¼Œä½¿å¾—å®ƒæˆä¸ºæ–°çš„当å‰å·¥ä½œç›®å½•。
如果命令 pushd æˆåŠŸï¼Œè¿˜è¦æ‰§è¡Œä¸€ä¸ª dir。 如果使用第一ç§å½¢å¼ï¼Œ
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 é€‰é¡¹çš„å‚æ•°ä¸ç»™å‡ºçš„æ–‡ä»¶æè¿°ç¬¦ fd ä¸
读å–,第一个è¯è¢«èµ‹äºˆç¬¬ä¸€ä¸ª name, 第二个è¯è¢«èµ‹äºˆç¬¬äºŒä¸ª name,
以æ¤ç±»æŽ¨ï¼Œå¤šä½™çš„è¯å’Œå…¶é—´çš„分隔符被赋予最åŽä¸€ä¸ª name.
如果从输入æµè¯»å…¥çš„è¯æ•°æ¯”å称数少,剩余的å称被赋予空值。 IFS
ä¸çš„å—符被用æ¥å°†è¡Œæ‹†åˆ†æˆè¯ã€‚ åæ–œæ å—符 (\)
è¢«ç”¨äºŽåˆ é™¤è¯»å–的下一å—符的特殊å«ä¹‰ï¼Œä»¥åŠç»è¡Œã€‚
如果给出了选项,将包å«ä¸‹åˆ—å«ä¹‰ï¼š
-a aname
è¯è¢«èµ‹ä»¥æ•°ç»„å˜é‡ aname 的连ç»çš„ä¸‹æ ‡ï¼Œä»Ž 0
开始。在赋新值之å‰ï¼Œ aname è¢«å–æ¶ˆå®šä¹‰ã€‚å…¶ä»– name
傿•°è¢«å¿½ç•¥ã€‚
-d delim
delim 的第一个å—符被用于结æŸè¾“å…¥è¡Œï¼Œè€Œä¸æ˜¯æ–°è¡Œç¬¦ã€‚
-e å¦‚æžœæ ‡å‡†è¾“å…¥æ¥è‡ªç»ˆç«¯ï¼Œå°†ä½¿ç”¨ readline (å‚è§ä¸Šé¢çš„ READ-
LINE ç« èŠ‚) æ¥èŽ·å¾—è¾“å…¥è¡Œã€‚
-n nchars
read 读入 nchars 个å—符åŽè¿”å›žï¼Œè€Œä¸æ˜¯ç‰å¾…一整行输入。
-p prompt
读å–任何输入之å‰ï¼Œåœ¨æ ‡å‡†é”™è¯¯æ˜¾ç¤ºæç¤º
prompt,末尾没有新行符。
æç¤ºåªæœ‰åœ¨è¾“å…¥æ¥è‡ªç»ˆç«¯æ—¶æ‰ä¼šæ˜¾ç¤ºã€‚
-r åæ–œæ ä¸ä½œä¸ºè½¬ä¹‰å—ç¬¦ã€‚åæ–œæ è¢«è®¤ä¸ºè¡Œçš„ä¸€éƒ¨åˆ†ã€‚ç‰¹æ®Šåœ°ï¼Œä¸€å¯¹åæ–œæ -新行符ä¸ä½œä¸ºç»è¡Œã€‚
-s 安陿¨¡å¼ã€‚如果输入æ¥è‡ªç»ˆç«¯ï¼Œå—符将ä¸ä¼šå›žæ˜¾ã€‚
-t timeout
使得 read 超时并返回失败,如果在 timeout
秒内没有读入完整的一行输入。 如果 read
䏿˜¯ä»Žç»ˆç«¯æˆ–管é“读å–è¾“å…¥ï¼Œé‚£ä¹ˆè¿™ä¸ªé€‰é¡¹æ— æ•ˆã€‚
-u fd 从文件æè¿°ç¬¦ fd ä¸è¯»å–输入。
如果没有给出 names_ 读å–的一行将赋予å˜é‡ REPLY。 返回值是
0,除éžé‡åˆ°äº† EOF,readP -u
readonly [-apf] [name ...]
给出的 name å°†è¢«æ ‡è®°ä¸ºåªè¯»çš„ï¼› names
的值ä¸èƒ½è¢«åŽæ¥çš„赋值è¯å¥æ”¹å˜ã€‚如果给出了 -f 选项,names
å¯¹åº”çš„å‡½æ•°ä¹Ÿè¢«æ ‡è®°ã€‚é€‰é¡¹ -a é™åˆ¶å˜é‡åªèƒ½æ˜¯æ•°ç»„类型。如果没有给出
name 傿•°ï¼Œæˆ–者如果给出了 -p é€‰é¡¹ï¼Œå°†æ‰“å°æ‰€æœ‰åªè¯»çš„å称。选项 -p
使得输出以一ç§å¯ä»¥è¢«é‡æ–°ç”¨ä½œè¾“å…¥çš„æ ¼å¼æ˜¾ç¤ºã€‚ 返回值是
0,除éžé‡åˆ°äº†éžæ³•的选项, names 之䏀䏿˜¯æœ‰æ•ˆçš„ shell
å˜é‡å,或选项 -f ä¸ç»™å‡ºçš„ name 䏿˜¯ä¸€ä¸ªå‡½æ•°ã€‚
return [n]
使得一个函数以指定值 n 退出。如果忽略了 n_
è¿”å›žçŠ¶æ€æ˜¯å‡½æ•°ä½“䏿‰§è¡Œçš„æœ€åŽä¸€ä¸ªå‘½ä»¤çš„退出状æ€ã€‚如果在函数外使用,但是是在一个以
. (source) 命令执行的脚本内,它使得 shell 䏿¢æ‰§è¡Œè„šæœ¬ï¼Œè¿”å›ž n
æˆ–è„šæœ¬ä¸æ‰§è¡Œçš„æœ€åŽä¸€ä¸ªå‘½ä»¤çš„退出状æ€ã€‚å¦‚æžœåœ¨å‡½æ•°å¤–ä½¿ç”¨ï¼Œå¹¶ä¸”ä¸æ˜¯åœ¨ä»¥
. æ‰§è¡Œçš„è„šæœ¬å†…ï¼Œè¿”å›žçŠ¶æ€æ˜¯å‡ã€‚
set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
ä¸å¸¦é€‰é¡¹æ—¶ï¼Œshell
å˜é‡çš„å称和值将以一ç§å¯ä»¥é‡ç”¨ä¸ºè¾“å…¥çš„æ ¼å¼æ˜¾ç¤ºã€‚
è¾“å‡ºæ ¹æ®å½“å‰è¯è¨€çŽ¯å¢ƒè¿›è¡ŒæŽ’åºã€‚æŒ‡å®šäº†é€‰é¡¹çš„æ—¶å€™ï¼Œå®ƒä»¬è®¾ç½®æˆ–å–æ¶ˆäº†
shell 的属性。
处ç†å®Œé€‰é¡¹ä¹‹åŽå‰©ä½™çš„任何傿•°éƒ½è¢«ä½œä¸ºä½ç½®å‚数的值被赋值,分别赋予
$1, $2, ... $n. 如果给出了选项,那么具有以下å«ä¹‰ï¼š
-a 自动将被修改或创建的å˜é‡å’Œå‡½æ•°æ ‡å¿—为导出至åŽç»å‘½ä»¤çš„环境ä¸ã€‚
-b åŽå°ä½œä¸šç»“æŸæ—¶ç«‹å³æŠ¥å‘Šçжæ€ï¼Œè€Œä¸æ˜¯åœ¨ä¸‹æ¬¡æ˜¾ç¤ºä¸»æç¤ºç¬¦å‰æŠ¥å‘Šã€‚åªæœ‰åœ¨å¯ç”¨ä½œä¸šæŽ§åˆ¶æ—¶æ‰æœ‰æ•ˆã€‚
-e ç«‹å³é€€å‡ºï¼Œå¦‚æžœ simple command (简å•命令,å‚è§ä¸Šé¢çš„
SHELL GRAMMAR ) 以éžé›¶å€¼é€€å‡ºã€‚shell
ä¸ä¼šé€€å‡ºï¼Œå¦‚果失败的命令是 until 或 while é¸¦è¿”å›Šå¾Šç³ éƒ‘
if è¯å¥çš„一部分, && 或 ||
åºåˆ—的一部分,或者命令的返回值是由 ! 纷玫å¥ï¼µæ”µ ERR
的陷阱,如果设置的è¯ï¼Œå°†åœ¨ shell é€€å‡ºå‰æ‰§è¡Œã€‚
-f ç¦æ¢è·¯å¾„扩展。
-h 在查找并执行命令时,记ä½å®ƒä»¬çš„ä½ç½®ã€‚这是默认å¯ç”¨çš„。
-k 所有以赋值è¯å¥å½¢å¼å‡ºçŽ°çš„å‚æ•°éƒ½è¢«åŠ å…¥åˆ°å‘½ä»¤æ‰§è¡Œçš„çŽ¯å¢ƒä¸ï¼Œä¸ä»…是命令åå‰é¢é‚£äº›ã€‚
-m 监视模å¼ã€‚作业控制被å¯ç”¨ã€‚在支æŒè¿™ä¸ªé€‰é¡¹çš„系统ä¸ï¼Œå®ƒåœ¨äº¤äº’
shell 䏿˜¯é»˜è®¤å¯ç”¨çš„ (å‚è§ä¸Šé¢çš„ JOB CONTROL
åŽå°è¿›ç¨‹åœ¨å•独的进程组ä¸è¿è¡Œï¼Œç»“æŸæ—¶å°†æ‰“å°å‡ºåŒ…å«å®ƒä»¬é€€å‡ºçжæ€çš„一行信æ¯ã€‚
-n 读å–å‘½ä»¤ï¼Œä½†ä¸æ‰§è¡Œã€‚è¿™å¯ä»¥ç”¨åœ¨æ£€æŸ¥ shell
脚本ä¸çš„è¯æ³•错误。交互 shell ä¸å®ƒè¢«å¿½ç•¥ã€‚
-o option-name
option-name å¯ä»¥æ˜¯å¦‚下之一:
allexport
与 -a 相åŒã€‚
braceexpand
与 -B 相åŒã€‚
emacs 使用 emacs æ ·å¼çš„命令行编冀缑妗U飧鲅∠钤诮æ¢
shell ä¸é»˜è®¤å¯ç”¨ï¼Œé™¤éž shell 以 --noediting
选项å¯åŠ¨ã€‚
errexit 与 -e 相åŒã€‚
hashall 与 -h 相åŒã€‚
histexpand
与 -H 相åŒã€‚
history å…许记录命令历å²ï¼Œå¦‚上述 HISTORY
ä¸çš„æè¿°ã€‚这个选项在交互 shell ä¸é»˜è®¤å¯ç”¨ã€‚
ignoreeof
它的效果是好åƒå·²å±€è‘±è¾› shell 命令
``IGNOREEOF=10'' ä¸€æ · (å‚è§ä¸Šé¢çš„ Shell Vari-
ables
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 æ ·å¼çš„命令行编冀缑妗
xtrace 与 -x 相åŒã€‚
如果给出了ä¸å¸¦ option-name çš„ -o
选项,当å‰é€‰é¡¹çš„值将被打å°å‡ºæ¥ã€‚如果给出了ä¸å¸¦
option-name çš„ +o
é€‰é¡¹ï¼Œå°†åœ¨æ ‡å‡†è¾“å‡ºæ˜¾ç¤ºä¸€ç³»åˆ—å¯ä»¥é‡å»ºå½“å‰é€‰é¡¹è®¾å®šçš„ set
命令。
-p 打开 privileged mode ( )在这个模å¼ä¸ï¼Œä¸ä¼šå¤„ç†
$ENV 和 $BASH_ENV 文件,shell
函数ä¸ä¼šä»ŽçŽ¯å¢ƒä¸ç»§æ‰¿ï¼ŒçŽ¯å¢ƒä¸å¦‚果有å˜é‡ SHELLOPT,
也将被忽略。如果 shell å¯åŠ¨æ—¶çš„æœ‰æ•ˆç”¨æˆ·(组) ID
与真实用户(组) ID ä¸åŒï¼Œå¹¶ä¸”没有给出 -p 选项,
将执行这些æ“作,有效用户 ID 将设置为真实用户
ID。如果å¯åŠ¨æ˜¯ç»™å‡ºäº† -p 选项,有效用户 ID ä¸ä¼š
被é‡ç½®ã€‚将这个选项关é—使得有效用户和组 ID
被设置为真实用户和组 ID。
-t 读å–并执行一个命令之åŽé€€å‡ºã€‚
-u åœ¨è¿›è¡Œå‚æ•°æ‰©å±•时,将未定义的å˜é‡ä½œä¸ºé”™è¯¯ã€‚如果试图扩展未定义的å˜é‡ï¼Œshell
将输出一æ¡é”™è¯¯æ¶ˆæ¯; 如果是éžäº¤äº’çš„ shell,shell
将以éžé›¶å€¼é€€å‡ºã€‚
-v 在读å–è¾“å…¥çš„åŒæ—¶æ‰“å°å‡ºæ¥ã€‚
-x 扩展æ¯ä¸ªç®€å•命令之åŽï¼Œæ˜¾ç¤º PS4
çš„å€¼ï¼ŒæŽ¥ç€æ˜¾ç¤ºå‘½ä»¤å’Œå®ƒæ‰©å±•åŽçš„傿•°ã€‚
-B shell æ‰§è¡ŒèŠ±æ‹¬å·æ‰©å±• (å‚è§ä¸Šé¢çš„ Brace Expansion。
这是默认å…许的。
-C 如果设置的è¯ï¼Œ bash 使用é‡å®šå‘æ“作符 >, >&, å’Œ <>
时,ä¸ä¼šè¦†ç›–å·²å˜åœ¨çš„æ–‡ä»¶ã€‚å¯ä»¥ä½¿ç”¨é‡å®šå‘æ“作符 >| 代替 >
æ¥åˆ›å»ºè¾“出文件,从而绕过这个é™åˆ¶ã€‚
-H å…许 Enable ! æ ·å¼çš„åŽ†å²æ›¿æ¢ã€‚在交互 shell
ä¸è¿™ä¸ªé€‰é¡¹æ˜¯é»˜è®¤å¯ç”¨çš„。
-P 如果设置的è¯ï¼Œshell 在执行类似 cd
的,改å˜å½“å‰å·¥ä½œç›®å½•的命令时,ä¸ä¼šè·Ÿéšç¬¦å·è¿žæŽ¥ã€‚它将使用物ç†çš„目录结构æ¥ä»£æ›¿ã€‚默认情况下,
bash 在执行改å˜å½“å‰ç›®å½•的命令时跟éšè·¯å¾„的逻剂础
-- å¦‚æžœè¿™ä¸ªé€‰é¡¹æ²¡æœ‰å‚æ•°ï¼Œå°†å–消ä½ç½®å‚数的定义。å¦åˆ™ï¼Œä½ç½®å‚数将设置为
arg,å³ä½¿å®ƒä»¬ä»¥ - 开始。
- 通知信å·çš„结æŸï¼Œä½¿å¾—所有剩余的 arg 被赋予ä½ç½®å‚数。 -x
å’Œ -v 选项被关é—。如果没有 arg,ä½ç½®å‚æ•°å°†ä¸ä¼šæ”¹å˜ã€‚
这个选项默认是关é—的,除éžå¦å¤–说明。使用 + è€Œä¸æ˜¯ -
使得这些选项被关é—。选项都å¯ä»¥ä½œä¸ºå‚数, 在 shell
å¯åŠ¨æ—¶æŒ‡å®šã€‚å½“å‰çš„选项集åˆå¯ä»¥ä»Ž $-
找到。返回值总是真,除éžé‡åˆ°äº†éžæ³•的选项。
shift [n]
从 n+1 ... 开始的选项被é‡å‘½å为 $1 .... 从 $# å‘下直到 $#-n+1
çš„é€‰é¡¹è¢«å–æ¶ˆå®šä¹‰ã€‚ n 必须是éžè´Ÿæ•´æ•°ï¼Œå°äºŽæˆ–ç‰äºŽ $#。如果 n 是
0,ä¸ä¼šæ”¹å˜å‚数。如果没有给出 nå°±å‡å®šå®ƒæ˜¯ 1。如果 n 比 $#
大,ä½ç½®å‚æ•°ä¸ä¼šæ”¹å˜ã€‚返回值大于 0,如果 n 比 $# 大或å°äºŽ
0ï¼›å¦åˆ™è¿”回 0。
shopt [-pqsu] [-o] [optname ...]
对于控制å¯é€‰çš„ shell 行为的å˜é‡ï¼Œæ”¹å˜å®ƒä»¬çš„值。没有选项或者有 -p
选项时,将显示所有å¯è®¾ç½®çš„选项列表,以åŠå®ƒä»¬æ˜¯å¦å·²æ—§æŸšçŽ«é—¹ç”˜å°½
-p 使得输出以一ç§å¯ä»¥è¢«é‡ç”¨ä¸ºè¾“å…¥çš„å½¢å¼æ˜¾ç¤ºã€‚
其他选项有如下å«ä¹‰ï¼š
-s å…许(设置) æ¯ä¸ª optname。
-u ç¦æ¢(å–æ¶ˆ) æ¯ä¸ª optname。
-q ç¦æ¢é€šå¸¸çš„输出 (安陿¨¡å¼)ï¼›è¿”å›žçŠ¶æ€æŒ‡ç¤ºäº† optname
是å¦è¢«è®¾ç½®ã€‚ 如果对 -q 给出了多个 optname 傿•°ï¼Œå¦‚果所有
optname 都被å…许,返回值就是 0ï¼› å¦åˆ™è¿”回éžé›¶å€¼ã€‚
-o é™åˆ¶ optname 的值为内建命令 set çš„ -o 选项定义的值。
如果使用 -s 或 -u 时没有给出 optname
傿•°ï¼Œæ˜¾ç¤ºå°†åˆ†åˆ«é™äºŽè¢«è®¾ç½®æˆ–è¢«å–æ¶ˆçš„选项。 除éžå¦å¤–说明,shopt
é€‰é¡¹é»˜è®¤è¢«ç¦æ¢(å–æ¶ˆ)。
返回值在列出选项时是 0,如果所有 optname
都被å…许的è¯ï¼Œå¦åˆ™æ˜¯éžé›¶å€¼ã€‚ å½“è®¾ç½®æˆ–å–æ¶ˆé€‰é¡¹æ—¶ï¼Œè¿”回值是
0ï¼Œé™¤éž optname æ˜¯éžæ³•çš„ shell 选项。
shopt 选项的列表是:
cdable_vars
如果设置的è¯ï¼Œå†…建命令 cd
çš„å‚æ•°å¦‚æžœä¸æ˜¯ç›®å½•,就å‡å®šæ˜¯ä¸€ä¸ªå˜é‡ï¼Œå®ƒçš„值是è¦åˆ‡æ¢åˆ°çš„目录å。
cdspell 如果设置的è¯ï¼Œ cd
命令ä¸ç›®å½•çš„ç»†å¾®æ‹¼å†™é”™è¯¯èƒ½å¤Ÿå¾—ä»¥çº æ£ã€‚检查的错误包括å—符错ä½ï¼Œç¼ºå—符,
é‡å¤è¾“å…¥åŒä¸€å—符。如果找到了æ£ç¡®çš„å€¼ï¼Œå°†æ‰“å°æ£ç¡®çš„æ–‡ä»¶å,命令将继ç»ã€‚
这个选项åªèƒ½åœ¨äº¤äº’ shell ä¸ä½¿ç”¨ã€‚
checkhash
如果设置的è¯ï¼Œbash
åœ¨æ‰§è¡Œå‘½ä»¤å‰æ£€æµ‹æ•£åˆ—表ä¸çš„命令是å¦å˜åœ¨ã€‚
如果一个被散列的命令ä¸å†å˜åœ¨ï¼Œå°†è¿›è¡Œæ£å¸¸çš„路径æœç´¢ã€‚
checkwinsize
如果设置的è¯ï¼Œbash
åœ¨æ¯æ¡å‘½ä»¤æ‰§è¡ŒåŽæ£€æµ‹çª—å£å¤§å°ï¼Œå¦‚果需è¦çš„è¯å°±æ›´æ–° LINES
和 COLUMNS 的值。
cmdhist 如果设置的è¯ï¼Œ bash
试ç€å°†ä¸€ä¸ªå¤šè¡Œå‘½ä»¤çš„æ‰€æœ‰è¡Œæ”¾åˆ°åŒä¸€ä¸ªåކ岿¡ç›®ä¸ã€‚è¿™æ ·ä½¿å¾—
多行命令å¯ä»¥å®¹æ˜“åœ°é‡æ–°ä¿®æ”¹ã€‚
dotglob 如果设置的è¯ï¼Œ bash 会把以 `.'
开始的文件å包å«åœ¨è·¯å¾„忉©å±•的结果ä¸ã€‚
execfail
如果设置的è¯ï¼Œéžäº¤äº’çš„ shell
如果ä¸èƒ½æ‰§è¡Œä½œä¸ºå‚æ•°æä¾›ç»™å†…建命令 exec
的文件时将ä¸ä¼šé€€å‡ºã€‚交互的 shell 在 exec
失败时ä¸ä¼šé€€å‡ºã€‚
expand_aliases
如果设置的è¯ï¼Œåˆ«å被扩展,就åƒä¸Šé¢ ALIASES
ä¸è®²åˆ°çš„ä¸€æ ·ã€‚è¿™ä¸ªé€‰é¡¹åœ¨äº¤äº’ shell 䏿˜¯é»˜è®¤å¯ç”¨çš„。
extglob 如果设置的è¯ï¼Œå°†å…è®¸ä¸Šé¢ Pathname Expansion
ä¸æåˆ°çš„æ‰©å±•æ¨¡å¼åŒ¹é…特性。
histappend
如果设置的è¯ï¼Œåœ¨ shell 退出时,历å²åˆ—è¡¨å°†è¿½åŠ åˆ°ä»¥ HIST-
FILE 的值为å的文件之åŽï¼Œè€Œä¸æ˜¯è¦†ç›–文件。
histreedit
如果设置的è¯ï¼Œå¹¶ä¸”æ£åœ¨ä½¿ç”¨ readlin,
用户å¯ä»¥é‡æ–°ä¿®æ”¹å¤±è´¥çš„åŽ†å²æ›¿æ¢ã€‚
histverify
如果设置的è¯ï¼Œå¹¶ä¸”æ£åœ¨ä½¿ç”¨ readlin,
åŽ†å²æ›¿æ¢çš„结果ä¸ä¼šç«‹å³ä¼ ç»™ shell è§£é‡Šå™¨ã€‚ç»“æžœè¡Œè¢«åŠ è½½åˆ°
readline 编蓟撼迩市斫薪徊é™ç”·è–·æ‘¹
hostcomplete
如果设置的è¯ï¼Œå¹¶ä¸”æ£åœ¨ä½¿ç”¨ readlin, bash
将试ç€å¯¹æ£åœ¨è¿›è¡Œè¡¥å…¨çš„åŒ…å« çš„è¯è¿›è¡Œä¸»æœºå补全
(å‚è§ä¸Šé¢çš„ READLINE ä¸çš„ Completing
段è½)。这是默认å…许的。
huponexit
如果设置的è¯ï¼Œåœ¨äº¤äº’的登录 shell 退出时 bash
将呿‰€æœ‰ä½œä¸šå‘出 SIGHUP ä¿¡å·ã€‚
interactive_comments
如果设置的è¯ï¼Œå°†å…许在交互 shell ä¸é‡åˆ°ä»¥ #
å¼€å¤´çš„è¯æ—¶å¿½ç•¥è¿™ä¸ªè¯å’Œä¸€è¡Œä¸æ‰€æœ‰å‰©ä½™çš„å—符 (å‚è§ä¸Šé¢çš„
COMMENTS 这个选项是默认å…许的。
lithist 如果设置的è¯ï¼Œå¹¶ä¸”å…许了 cmdhist
选项,多行的命令在ä¿å˜åˆ°åކå²ä¸æ—¶å°†åŒ…嫿–°è¡Œç¬¦ï¼Œè€Œä¸æ˜¯åœ¨å¯èƒ½çš„地方使用分å·ã€‚
login_shell
如果 shell 作为登录 shell å¯åŠ¨ï¼Œå°†è®¾ç½®è¿™ä¸ªé€‰é¡¹
(å‚è§ä¸Šé¢çš„ (INVOCATION) 。这个值ä¸å¯ä¿®æ”¹ã€‚
mailwarn
如果设置的è¯ï¼Œå¹¶ä¸” bash
æ£åœ¨æ£€æµ‹ä¸Šæ¬¡æ£€æµ‹ä»¥æ¥è¢«å˜å–过的邮件, 将显示 ``The mail
in mailfile has been read''(mailfile ä¸çš„邮件已被读å–)。
no_empty_cmd_completion
如果设置的è¯ï¼Œå¹¶ä¸”æ£åœ¨ä½¿ç”¨ readlin,
试图在空行上执行补全时, bash ä¸ä¼šæœç´¢ PATH
æ¥æŸ¥æ‰¾å¯èƒ½çš„补全。
nocaseglob
如果设置的è¯ï¼Œ bash
进行路径扩展时使用大å°å†™ä¸æ•感方å¼åŒ¹é…文件å(å‚è§ä¸Šé¢çš„
Pathname Expansion
nullglob
如果设置的è¯ï¼Œ bash
å°†å…许ä¸åŒ¹é…ä»»ä½•æ–‡ä»¶çš„æ¨¡å¼æ‰©å±•为空å—ç¬¦ä¸²è€Œä¸æ˜¯å®ƒä»¬è‡ªèº«(å‚è§ä¸Šé¢çš„
Pathname Expansion
progcomp
如果设置的è¯ï¼Œå°†å¯ç”¨å¯ç¼–程补全功能 (å‚è§ä¸Šé¢çš„ Pro-
grammable Completion)。 这个选项是默认å¯ç”¨çš„。
promptvars
如果设置的è¯ï¼Œæç¤ºå—符串è¦ç«Ÿåަ PROMPTING
ä¸æè¿°çš„æ‰©å±•ï¼Œç„¶åŽè¿˜è¦-
过å˜é‡å’Œå‚数扩展。这个选项是默认å¯ç”¨çš„。
restricted_shell
shell 设置这个选项,如果它是以å—陿¨¡å¼å¯ç”¨çš„ (å‚è§ä¸‹é¢çš„
shell(RESTRICTED SHELL)
ç« èŠ‚)。这个值ä¸èƒ½ä¿®æ”¹ã€‚在执行å¯åŠ¨æ–‡ä»¶æ—¶ï¼Œå®ƒä¸ä¼šè¢«é‡ç½®ï¼Œä½¿å¾—å¯åŠ¨æ–‡ä»¶å¯ä»¥
得知 shell æ˜¯å¦æ˜¯å—é™çš„。
shift_verbose
如果设置的è¯ï¼Œå†…建命令 shift
在åç§»é‡è¶…过ä½ç½®å‚数的个数时打å°ä¸€æ¡é”™è¯¯æ¶ˆæ¯ã€‚
sourcepath
如果设置的è¯ï¼Œå†…建命令 source (.) 使用 PATH
ä¸çš„å€¼æ¥æŸ¥æ‰¾åŒ…å«ä½œä¸ºå‚数给出的文件。这个选项默认是å¯ç”¨çš„。
xpg_echo
如果设置的è¯ï¼Œå†…建命令 echo é»˜è®¤æ‰©å±•åæ–œæ 转义åºåˆ—。
suspend [-f]
挂起 shell 的执行,直到收到一个 SIGCONT ä¿¡å·ã€‚选项 -f
表示如果这是一个登录 shell,那么ä¸è¦æç¤ºï¼Œç›´æŽ¥æŒ‚起。返回值是
0ï¼Œé™¤éž shell 是登录 shell 并且没有指定 -,
或者没有å¯ç”¨ä½œä¸šæŽ§åˆ¶ã€‚
test expr
[ expr ]
返回状æ€å€¼ 0 或 1ï¼Œæ ¹æ®æ¡ä»¶è¡¨è¾¾å¼ expr
的求值而定。æ¯ä¸ªæ“作符和æ“作数都必须是一个å•ç‹¬çš„å‚æ•°ã€‚表达å¼ä½¿ç”¨ä¸Šé¢
(CONDITIONAL EXPRESSIONS) ä¸çš„æ“ä½œæž„é€ ã€‚
表达å¼å¯ä»¥ç”¨ä¸‹åˆ—æ“作符结åˆï¼Œä»¥ä¼˜å…ˆçº§çš„é™åºåˆ—出。
! expr 值为真,如果 expr 为å‡ã€‚
( expr )
返回 expr 的值。括å·å¯ä»¥ç”¨æ¥è¶…è¶Šæ“作符的一般优先级。
expr1 -a expr2
值为真,如果 expr1 和 expr2 都为真。
expr1 -o expr2
值为真,如果 expr1 或 expr2 为真。
test å’Œ [ ä½¿ç”¨åŸºäºŽå‚æ•°ä¸ªæ•°çš„一系列规则,对æ¡ä»¶è¡¨è¾¾å¼è¿›è¡Œæ±‚值。
0 arguments
表达å¼ä¸ºå‡ã€‚
1 argument
表达å¼ä¸ºçœŸï¼Œå½“䏔仅当傿•°éžç©ºã€‚
2 arguments
å¦‚æžœç¬¬ä¸€ä¸ªå‚æ•°æ˜¯ !,表达å¼ä¸ºçœŸï¼Œå½“ä¸”ä»…å½“ç¬¬äºŒä¸ªå‚æ•°ä¸ºç©ºã€‚
å¦‚æžœç¬¬ä¸€ä¸ªå‚æ•°æ˜¯ä¸Šé¢ (CONDITIONAL EXPRESSIONS)
ä¸åˆ—出的å•ç›®æ¡ä»¶è¿ç®—符之一,表达å¼ä¸ºçœŸï¼Œå½“且仅当å•目测试为真。
å¦‚æžœç¬¬ä¸€ä¸ªå‚æ•°ä¸æ˜¯åˆæ³•çš„å•ç›®æ¡ä»¶è¿ç®—符,表达å¼ä¸ºå‡ã€‚
3 arguments
å¦‚æžœç¬¬äºŒä¸ªå‚æ•°æ˜¯ä¸Šé¢ (CONDITIONAL EXPRESSIONS)
ä¸åˆ—出的二进制æ¡ä»¶æ“作符之一,表达å¼çš„ç»“æžœæ˜¯ä½¿ç”¨ç¬¬ä¸€å’Œç¬¬ä¸‰ä¸ªå‚æ•°ä½œä¸ºæ“作数的二进制测试的结果。
å¦‚æžœç¬¬ä¸€ä¸ªå‚æ•°æ˜¯
!,表达å¼å€¼æ˜¯ä½¿ç”¨ç¬¬äºŒå’Œç¬¬ä¸‰ä¸ªå‚数进行åŒå‚数测试的结果å–å。
å¦‚æžœç¬¬ä¸€ä¸ªå‚æ•°æ˜¯ (ï¼Œç¬¬ä¸‰ä¸ªå‚æ•°æ˜¯
)ï¼Œç»“æžœæ˜¯å¯¹ç¬¬äºŒä¸ªå‚æ•°è¿›è¡Œå•傿•°æµ‹è¯•的结果。
å¦åˆ™ï¼Œè¡¨è¾¾å¼ä¸ºå‡ã€‚è¿™ç§æƒ…况下 -a å’Œ -o
æ“作符被认为二进制æ“作符。
4 arguments
å¦‚æžœç¬¬ä¸€ä¸ªå‚æ•°æ˜¯
!ï¼Œç»“æžœæ˜¯ç”±å‰©ä½™å‚æ•°ç»„æˆçš„䏉傿•°è¡¨è¾¾å¼ç»“æžœå–å。
å¦åˆ™ï¼Œè¡¨è¾¾å¼è¢«æ ¹æ®ä¸Šé¢åˆ—出的优先级规则解释并执行。
5 或更多 arguments
表达å¼è¢«æ ¹æ®ä¸Šé¢åˆ—出的优先级规则解释并执行。
times 对 shell ä»¥åŠ shell è¿è¡Œçš„进程,打å°ç´¯è®¡çš„用户和系统时间。
è¿”å›žçŠ¶æ€æ˜¯ 0。
trap [-lp] [arg] [sigspec ...]
当 shell æ”¶åˆ°ä¿¡å· sigspec 时,命令 arg
将被读å–并执行。如果没有给出 arg 或者给出的是 -,
所有指定的信å·è¢«è®¾ç½®ä¸ºå®ƒä»¬çš„åˆå§‹å€¼ (进入 shell 时它们的值)。如果
arg 是空å—符串, sigspec 指定的信å·è¢« shell
和它å¯åŠ¨çš„å‘½ä»¤å¿½ç•¥ã€‚å¦‚æžœ arg ä¸å˜åœ¨ï¼Œå¹¶ä¸”给出了 -p 那么与æ¯ä¸ª
sigspec
相关è”的陷阱命令将被显示出æ¥ã€‚å¦‚æžœæ²¡æœ‰ç»™å‡ºä»»ä½•å‚æ•°ï¼Œæˆ–åªç»™å‡ºäº†
-, trap 将打å°å‡ºä¸Žæ¯ä¸ªä¿¡å·ç¼–å·ç›¸å…³çš„命令列表。æ¯ä¸ª sigspec
å¯ä»¥æ˜¯ <signal.h> 定义的信å·å,或是一个信å·ç¼–å·ã€‚ 如果 sigspec
是 EXIT (0),命令 arg 将在 shell 退出时执行。如果 sigspec 是
DEBUG, 命令 arg 将在æ¯ä¸ªç®€å•命令 (simple command,å‚è§ä¸Šé¢çš„
SHELL GRAMMAR) ä¹‹åŽæ‰§è¡Œã€‚如果 sigspec 是 ERR, 命令 arg
将在任何命令以éžé›¶å€¼é€€å‡ºæ—¶æ‰§è¡Œã€‚如果失败的命令是 until 或 while
é¸¦è¿”å›Šå¾Šç³ éƒ‘ if è¯å¥çš„一部分, && 或 ||
åºåˆ—的一部分,或者命令的返回值是通过 ! 转化而æ¥ï¼Œ ERR
陷阱将ä¸ä¼šæ‰§è¡Œã€‚选项 -l 使得 shell 打å°ä¿¡å·å和对应编å·çš„列表。
shell
忽略的信å·ä¸èƒ½è¢«æ•æ‰æˆ–é‡ç½®ã€‚在å进程ä¸ï¼Œè¢«æ•æ‰çš„ä¿¡å·åœ¨è¿›ç¨‹åˆ›å»ºæ—¶è¢«é‡ç½®ä¸ºåˆå§‹å€¼ã€‚
返回值为å‡ï¼Œå¦‚æžœ sigspec éžæ³•ï¼›å¦åˆ™ trap 返回真。
type [-aftpP] name [name ...]
没有选项时,指示æ¯ä¸ª name
将如何被解释,如果用作一个命令å。如果使用了 -t 选项, type
打å°ä¸€ä¸ªå—符串,内容是如下之一: alias, keyword, function,
builtin, 或 file _ 如果 name 分别是一个别å,shell
ä¿ç•™å—,函数,内建命令或ç£ç›˜æ–‡ä»¶ã€‚如果没有找到 name_
那么ä¸ä¼šæ‰“å°ä»»ä½•东西,返回退出状æ€å‡ã€‚如果使用了 -p 选项, type
返回如果 name 作为命令å,将被执行的ç£ç›˜æ–‡ä»¶å;或者返回空,如果
``type -t name'' ä¸ä¼šè¿”回 file. 选项 -P 选项强制对æ¯ä¸ª name
æœç´¢ PAT, å³ä½¿ ``type -t name'' ä¸ä¼šè¿”回 file.
如果命令在散列ä¸ï¼Œ -p å’Œ -P å°†æ‰“å°æ•£åˆ—çš„å€¼ï¼Œè€Œä¸æ˜¯ PATH
ä¸é¦–先出现的那一个文件。如果使用了 -a 选项, type
æ‰“å°æ‰€æœ‰åŒ…å«å¯æ‰§è¡Œçš„åç§° name
的场åˆã€‚结果包括别åå’Œå‡½æ•°ï¼Œå½“ä¸”ä»…å½“æ²¡æœ‰åŒæ—¶ä½¿ç”¨ -p 选项。使用
-a æ—¶ä¸ä¼šæŸ¥æ‰¾æ•£åˆ—ä¸çš„命令表。选项 -f é˜»æ¢ shell
进行查找,就åƒåœ¨å†…建命令 command ä¸ä¸€æ ·ã€‚ type
è¿”å›žçœŸï¼Œå¦‚æžœæ‰¾åˆ°äº†ä»»ä½•å‚æ•°ã€‚什么都没找到则返回å‡ã€‚
ulimit [-SHacdflmnpstuv [limit]]
在支æŒå®ƒçš„系统上,对 shell
和它å¯åŠ¨çš„è¿›ç¨‹ï¼Œæä¾›å¯¹å¯ç”¨èµ„æºçš„æŽ§åˆ¶ã€‚ 选项 -H å’Œ -S
指定为所给资æºè®¾å®šçš„硬性和柔性é™é¢ã€‚
硬性é™é¢åœ¨è®¾ç½®åŽä¸èƒ½å¢žåŠ ï¼›æŸ”æ€§é™é¢å¯ä»¥å¢žåŠ ï¼Œç›´åˆ°ä¸Žç¡¬æ€§é™é¢ç›¸ç‰ã€‚
如果没有给出 -H 或 -S é€‰é¡¹ï¼Œå°†åŒæ—¶è®¾ç½®ç¡¬æ€§å’ŒæŸ”性é™é¢ã€‚ limit
的值å¯ä»¥æ˜¯ä¸€ä¸ªæ•°å—,å•使˜¯æŒ‡å®šèµ„æºçš„å•元值,或者是特殊值 hard,
soft, 或 unlimited
ä¹‹ä¸€ï¼Œæ„æ€åˆ†åˆ«æ˜¯å½“å‰ç¡¬æ€§é™é¢ï¼Œå½“剿Ÿ”性é™é¢å’Œæ²¡æœ‰é™é¢ã€‚如果忽略了
limit_ 将打å°å‡ºå½“å‰å¯¹èµ„æºçš„æŸ”性é™é¢å€¼ï¼Œé™¤éžç»™å‡ºäº† -H
选项。当指定多于一个
èµ„æºæ—¶ï¼Œé™é¢åç§°å’Œå•ä½å°†åœ¨å€¼ä¹‹å‰æ‰“å°å‡ºæ¥ã€‚其他选项按照如下æ„义解释:
-a 报告所有当å‰é™é¢
-c core 文件的最大值
-d è¿›ç¨‹æ•°æ®æ®µçš„æœ€å¤§å€¼
-f shell 创建的文件的最大值
-l 内å˜ä¸å¯ä»¥é”定的最大值
-m 常驻内å˜çš„æœ€å¤§å€¼
-n 打开的文件æè¿°ç¬¦æœ€å¤§ä¸ªæ•° (大多数系统ä¸å…许设置这个值)
-p 管é“大å°ï¼Œä»¥ 512 å—节的å—为å•ä½ (这个值å¯èƒ½ä¸èƒ½è®¾ç½®)
-s æ ˆçš„æœ€å¤§å€¼
-t cpu 时间总数的最大值,以秒计
-u 用户å¯ä»¥è¿è¡Œçš„æœ€å¤§è¿›ç¨‹æ•°
-v shell å¯ç”¨çš„è™šæ‹Ÿå†…å˜æ€»é‡çš„æœ€å¤§å€¼
如果给出了 limit_ 它将是指定资æºçš„æ–°é™é¢ (选项 -a
åªæ˜¾ç¤ºå®ƒä»¬)。如果没有给出选项,则å‡è®¾æœ‰ -。值的递增间隔是 1024
å—节,除了 -t å•使˜¯ 秒, -p å•使˜¯ 512 å—节的å—个数, -n å’Œ -u
是ä¸å¯è°ƒèŠ‚çš„å€¼ã€‚è¿”å›ž
0,除éžç»™å‡ºäº†éžæ³•çš„é€‰é¡¹æˆ–å‚æ•°ï¼Œæˆ–者在设置新的é™é¢æ—¶å‘生了错误。
umask [-p] [-S] [mode]
用户创建文件的掩ç 被设置为 mode. 如果 mode
以数å—开始,它被解释为一个八进制数;å¦åˆ™è¢«è§£é‡Šä¸ºç±»ä¼¼äºŽ chmod(1)
接å—的符å·å½¢å¼çš„æ¨¡å¼æŽ©ç 。如果忽略了 mode_
将打å°å½“剿ީç 值。选项 -S
使得掩ç 以符å·å½¢å¼æ‰“å°ï¼›é»˜è®¤è¾“出是八进制数。如果给出了 -p
选项,并且忽略了 mode_
输出将是一ç§å¯ä»¥é‡ç”¨ä¸ºè¾“入的形å¼ã€‚返回值是
0,如果æˆåŠŸæ”¹å˜äº†æ¨¡å¼ï¼Œæˆ–者没有给出 mode。 其他情况返回å‡ã€‚
unalias [-a] [name ...]
从已定义的别å列表ä¸åˆ 除 name。如果给出了 -a
å°†åˆ é™¤æ‰€æœ‰åˆ«å定义。返回值是真,除éžç»™å‡ºçš„ name
䏿˜¯å·²å®šä¹‰çš„别å。
unset [-fv] [name ...]
å°†æ¯ä¸ª name 对应的å˜é‡æˆ–å‡½æ•°åˆ é™¤ã€‚å¦‚æžœæ²¡æœ‰ç»™å‡ºé€‰é¡¹ï¼Œæˆ–è€…ç»™å‡ºäº†
-v 选项, name 仅包括 shell
å˜é‡ã€‚åªè¯»çš„å˜é‡ä¸èƒ½è¢«å–消定义。如果给出了 -f 选项, name 仅包括
shell
å‡½æ•°ï¼Œå‡½æ•°çš„å®šä¹‰å°†è¢«åˆ é™¤ã€‚æ¯ä¸ªè¢«å–消定义的å˜é‡æˆ–函数都被从åŽç»å‘½ä»¤çš„环境ä¸åˆ 除。
如果 RANDOM, SECONDS, LINENO, HISTCMD, FUNCNAME, GROUPS, 或者
DIRSTACK
ä¸çš„ä»»ä½•ä¸€ä¸ªè¢«å–æ¶ˆå®šä¹‰ï¼Œå®ƒä»¬å°†ä¸§å¤±ç‰¹æ®Šçš„属性,å³ä½¿å®ƒä»¬åŽæ¥è¢«é‡æ–°å®šä¹‰ã€‚
é€€å‡ºçŠ¶æ€æ˜¯çœŸï¼Œé™¤éž name ä¸å˜åœ¨æˆ–是åªè¯»çš„。
wait [n]
ç‰å¾…指定的进程,返回它的终æ¢çжæ€ã€‚ n å¯ä»¥æ˜¯è¿›ç¨‹ ID
或一个作业å·ï¼›å¦‚果给出的是作业å·ï¼Œå°†ç‰å¾…作业的管é“䏿‰€æœ‰è¿›ç¨‹ã€‚如果没有给出
n_å°†ç‰å¾…所有当å‰å¤„于激活状æ€çš„åè¿›ç¨‹ï¼Œè¿”å›žçŠ¶æ€æ˜¯ 0。如果 n
指定了ä¸å˜åœ¨çš„è¿›ç¨‹æˆ–ä½œä¸šï¼Œè¿”å›žçŠ¶æ€æ˜¯
127。å¦åˆ™ï¼Œè¿”å›žçŠ¶æ€æ˜¯æ‰€ç‰å¾…的最åŽä¸€ä¸ªè¿›ç¨‹æˆ–作业的退出状æ€ã€‚
如果 bash 以 rbash åç§°å¯åŠ¨ï¼Œæˆ–è€…å¯åŠ¨æ—¶ä½¿ç”¨äº† -r 选项,那么它æˆä¸ºå—é™çš„
shell。 å—é™çš„ shell 一般用æ¥å»ºç«‹ä¸€ä¸ªæ¯”æ ‡å‡†çš„ shell
å—到更多控制的环境。 它的行为与 bash 一致,除了下列行为是ä¸å…许的 (dis-
allowed) 或ä¸ä¼šè¿è¡Œçš„ (not performed)。
o 使用 cd æ¥æ”¹å˜è·¯å¾„ï¼›
o è®¾ç½®æˆ–å–æ¶ˆ SHELL, PATH, ENV, 或 BASH_ENV å˜é‡çš„值;
o 指定的命令åä¸åŒ…å« / ï¼›
o æŒ‡å®šåŒ…å« / 的文件åä½œä¸ºä¼ é€’ç»™å†…å»ºå‘½ä»¤ . çš„å‚æ•°ï¼›
o æŒ‡å®šåŒ…å«æ–œæ (slash) 的文件å作为 -p é€‰é¡¹çš„å‚æ•°ï¼Œä¼ 递给 hash
内建命令;
o å¯åŠ¨æ—¶ä»Ž shell 环境ä¸å¯¼å…¥ (import) 函数定义;
o å¯åŠ¨æ—¶è§£é‡Š shell çŽ¯å¢ƒä¸ SHELLOPTS 的值;
o 使用 >, >|, <>, >&, &>, å’Œ >> ç‰é‡å®šå‘æ“作符é‡å®šå‘输出;
o 使用 exec 内建命令æ¥ä»¥å¦ä¸€ä¸ªå‘½ä»¤æ›¿æ¢ shellï¼›
o 使用 enable 内建命令的 -f å’Œ -d 选项æ¥å¢žåŠ å’Œåˆ é™¤å†…å»ºå‘½ä»¤ï¼›
o 使用 enable 内建命令æ¥å…è®¸å’Œç¦æ¢ shell 内建命令;
o 指定 command 内建命令的 -p 选项;
o 使用 set +r 或 set +o restricted æ¥å…³é—å—陿¨¡å¼ã€‚
这些é™åˆ¶åœ¨æ‰€æœ‰å¯åŠ¨æ–‡ä»¶è¯»å–ä¹‹åŽæ‰ä¼šç”Ÿæ•ˆã€‚
当一个 shell 脚本作为一个命令执行时 (å‚è§ä¸Šé¢çš„ (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
系统范围的åˆå§‹åŒ–文件,登录 shell 会执行它
~/.bash_profile
个人åˆå§‹åŒ–文件,登录 shell 会执行它
~/.bashrc
个人的æ¯ä¸ªäº¤äº’å¼ shell å¯åŠ¨æ—¶æ‰§è¡Œçš„æ–‡ä»¶
~/.bash_logout
个人的登录 shell æ¸…ç†æ–‡ä»¶ï¼Œå½“一个登录 shell 退出时会执行它
~/.inputrc
个人的 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 “哲å¦â€
(`philosophical') çš„ “错误报告†å¯ä»¥å¯„ç»™ bug-bash@gnu.org 或者贴到
Usenet 新闻组 gnu.bash.bug 之上。
所有错误报告应当包括:
bash 的版本å·
硬件信æ¯å’Œæ“作系统
用æ¥ç¼–译的编译器
对 bug 行为的æè¿°
å¯ä»¥æ¿€æ´»è¿™ä¸ª bug 的一个çŸå°çš„脚本或者什么 “秘诀†(recipe)
bashbug 会自动在它æä¾›çš„错误报告模æ¿ä¸æ’å…¥å‰ä¸‰é¡¹ã€‚
关于这份手册页的评论和错误报告请直接æäº¤åˆ° chet@ins.CWRU.Edu.
BUGS
它太大了,并且有点慢。
bash å’Œä¼ ç»Ÿç‰ˆæœ¬çš„ sh ä¹‹é—´æœ‰ä¸€äº›ç»†å¾®çš„å·®åˆ«ï¼Œå¤§éƒ¨åˆ†æ˜¯å› ä¸º POSIX
è§„çº¦çš„è¦æ±‚。
åˆ«åæœºåˆ¶åœ¨ä¸€äº›åº”用ä¸ä¼šæ··æ·†ã€‚
Shell 内建命令和函数ä¸å¯ç»ˆæ¢/釿–°å¼€å§‹ã€‚
组åˆçš„命令和使用 `a ; b ; c'
å½¢å¼çš„命令åºåˆ—åœ¨è¿›ç¨‹è¯•å›¾æš‚åœæ—¶ä¸èƒ½å¾ˆå¥½å¤„ç†ã€‚ å½“ä¸€ä¸ªè¿›ç¨‹ä¸æ¢ï¼Œshell
ä¼šç«‹å³æ‰§è¡Œåºåˆ—ä¸çš„下一æ¡å‘½ä»¤ã€‚
也å¯ä»¥å°†å‘½ä»¤çš„åºåˆ—放在圆括å·ä¸ï¼Œæ¥å¼ºåˆ¶å¯åЍå
shellï¼Œè¿™æ ·å°±å¯ä»¥å°†å®ƒä»¬ä½œä¸ºä¸€ä¸ªå•å…ƒä¸æ¢äº†ã€‚
在 $(...) 命令替æ¢ä¸çš„æ³¨é‡Šä¸ä¼šè¢«è§£é‡Šï¼Œç›´åˆ°æ‰§è¡Œæ›¿æ¢çš„æ—¶å€™ã€‚
这将延迟报错,直到命令开始执行之åŽçš„一段时间。
数组å˜é‡è¿˜ä¸èƒ½å¯¼å‡º (export)。
]
<bbbush@163.com>
]
2004.03.05
linu ma :
http://cmpp.linuxforum.net