shell $ 相关 参数变量

shell 参数 $0, $#, $*, $@, $?, $$和命令行参数

1
2
3
4
$* 和 $@ 的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。


/dev/null 是一个特殊的设备文件,这个文件接收到的任何数据都会被丢弃。因此,null这个设备通常也被成为位桶(bit bucket)或黑洞

0 —— stdin(标准输入) 1 —— stdout (标准输出) 2 —— stderr (标准错误)

2> /dev/null 错误重定向到黑洞


1
2
3
4
5
6
7
$()` ` 不同

var=$(cmd) or var=`cmd`

cmd => 原生命令 find or func param

$() 可读性

$var and ${var} 大部分相同 注意区分

1
2
3
4
5
var=foo
echo $varbar
# Prints nothing because there is no variable 'varbar'
echo ${var}bar
# foobar

双引号=> 一个单词

1
2
3
4
5
var="foo bar"
for i in "$var"; do # Expands to 'for i in "foo bar"; do...'
    echo $i         #   so only runs the loop once
done
# foo bar
1
2
3
4
5
6
var="foo bar"
for i in $var; do # Expands to 'for i in foo bar; do...'
    echo $i       #   so runs the loop twice, once for each argument
done
# foo
# bar

数组$ 有空格时不一样

1
2
3
4
5
6
foo=("the first" "the second")
for i in "${foo[@]}"; do # Expands to 'for i in "the first" "the second"; do...'
    echo $i              #   so the loop runs twice
done
# the first
# the second
1
2
3
4
5
6
7
8
foo=("the first" "the second")
for i in ${foo[@]}; do # Expands to 'for i in the first the second; do...'
    echo $i            #   so the loop runs four times!
done
# the
# first
# the
# second