bash
BASH
echo
-nno\n-e转义引号中的特殊- third
a && b a success then b
a || b a not success then b
ext
设置
set -o noglob
set -f
set +o noglob
set +f
这个
echo ~+ # current folder(pwd)
echo ?.txt
ls *.txt
注意,* 字符扩展属于文件名扩展,只有文件确实存在的前提下才会扩展。如果文件不存在,就会原样输出。
方括号扩展的形式是[...],只有文件确实存在的前提下才会扩展。如果文件不存在,就会原样输出。括号之中的任意一个字符。
大括号扩展{...}表示分别扩展成大括号里面的所有值,各个值之间使用逗号分隔。比如,{1,2,3}扩展成1 2 3。
echo {001..5}
echo {a..z}
用户创建的变量仅可用于当前 Shell,子 Shell 默认读取不到父 Shell 定义的变量。为了把变量传递给子 Shell,需要使用export命令。这样输出的变量,对于子 Shell 来说就是环境变量。echo a.{,.txt}
变量扩展
echo $SHELL
echo ${SHELL}
子命令扩展
```bash
echo $(ls)
echo `ls`
echo $(ls $(pwd))
算术
$((2 + 2))
单引号用于保留字符的字面含义,各种特殊字符在单引号里面,都会变为普通字符,比如星号(*)、美元符号($)、反斜杠(\)等。
通配符*是一个特殊字符,放在双引号之中,就变成了普通字符,会原样输出。这一点需要特别留意,这意味着,双引号里面不会进行文件名扩展。
但是,三个特殊字符除外:美元符号($)、反引号(`)和反斜杠(\)。这三个字符在双引号之中,依然有特殊含义,会被 Bash 自动扩展。
变量
a=b
d=$((1+2))
c="str"
e=$(ls)
如果变量的值本身也是变量,可以使用${!varname}的语法,读取最终的值。
unset a
# ==
a=''
# ==
a=
用户创建的变量仅可用于当前 Shell,子 Shell 默认读取不到父 Shell 定义的变量。为了把变量传递给子 Shell,需要使用export命令。这样输出的变量,对于子 Shell 来说就是环境变量。
$?退出码$$进程id$!为最近一个后台执行的异步命令的进程 ID。$0shell名/运行脚本名$#表示脚本的参数数量,$@表示脚本的参数值,参见脚本一章。