mirror of
https://github.com/jlevy/the-art-of-command-line.git
synced 2024-12-12 10:45:00 +02:00
fix missing paragraph
> The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; and filename expansion. (For example, a range like {1..20} cannot be expressed with variables using {$a..$b}. Use seq or a for loop instead, e.g., seq $a $b or for((i=a; i<=b; i++)); do ... ; done.) > Brace expansion is performed before any other expansion. Two paragraphs do not have translated text.
This commit is contained in:
parent
84482aa24d
commit
00763520d6
@ -139,7 +139,9 @@
|
||||
|
||||
- 在 Bash 中,变量有许多的扩展方式。`${name:?error message}` 用于检查变量是否存在。此外,当 Bash 脚本只需要一个参数时,可以使用这样的代码 `input_file=${1:?usage: $0 input_file}`。在变量为空时使用默认值:`${name:-default}`。如果你要在之前的例子中再加一个(可选的)参数,可以使用类似这样的代码 `output_file=${2:-logfile}`,如果省略了 $2,它的值就为空,于是 `output_file` 就会被设为 `logfile`。数学表达式:`i=$(( (i + 1) % 5 ))`。序列:`{1..10}`。截断字符串:`${var%suffix}` 和 `${var#prefix}`。例如,假设 `var=foo.pdf`,那么 `echo ${var%.pdf}.txt` 将输出 `foo.txt`。
|
||||
|
||||
- 使用括号扩展(`{`...`}`)来减少输入相似文本,并自动化文本组合。这在某些情况下会很有用,例如 `mv foo.{txt,pdf} some-dir`(同时移动两个文件),`cp somefile{,.bak}`(会被扩展成 `cp somefile somefile.bak`)或者 `mkdir -p test-{a,b,c}/subtest-{1,2,3}`(会被扩展成所有可能的组合,并创建一个目录树)。
|
||||
- 使用括号扩展(`{`...`}`)来减少输入相似文本,并自动化文本组合。这在某些情况下会很有用,例如 `mv foo.{txt,pdf} some-dir`(同时移动两个文件),`cp somefile{,.bak}`(会被扩展成 `cp somefile somefile.bak`)或者 `mkdir -p test-{a,b,c}/subtest-{1,2,3}`(会被扩展成所有可能的组合,并创建一个目录树)。括号扩展优先于其他展开。
|
||||
|
||||
- 展开顺序:括号展开;波浪号展开,参数和变量展开,算术运算展开,和命令替换(从左到右进行);单词分割;以及文件名展开。(比如,像`{1...20}`的一个范围不能使用这样子`${$a..$b}`的方式来表达。而是使用`seq` 或 一个`for`循环来代替,例如,`seq $a $b` 或 `for((i=a; i<=b; i++)); ... ; done`。)
|
||||
|
||||
- 通过使用 `<(some command)` 可以将输出视为文件。例如,对比本地文件 `/etc/hosts` 和一个远程文件:
|
||||
```sh
|
||||
|
Loading…
Reference in New Issue
Block a user