shell 中 $ 的各种含义

https://blog.csdn.net/dujidan/article/details/115396653

执行一段命令

execCommand() {
    result=$(eval $@)
}

execCommand "curl -F 'key=${key}' http://www.xxx.com/api/"
echo "result=${result}"

对应含义

$0: 脚本本身文件名称
$1: 命令行第一个参数,$2为第二个,以此类推
$*: 所有参数列表
$@: 所有参数列表
$#: 参数个数
$$: 脚本运行时的PID
$?: 脚本退出码
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同
$@ 跟$*类似,但是可以当作数组用

@的区别

当命令行为test.sh 1 2 3
"$*"表示"1 2 3"
"$@"表示"1" "2" "3"
二者没有被引号括起来时是一样的都为"1 2 3",只有当被引号括起来后才表现出差异

# 数组 animals
$ animals=("a dog" "a cat" "a fish")

# ${animals[*]} 和 ${animals[@]}的行为是一致
$ for i in ${animals[*]}; do echo $i; done
$ for i in ${animals[@]}; do echo $i; done
#输出如下
a
dog
a
cat
a
fish

# 被用引号引起来的区别
$ for i in "${animals[*]}"; do echo $i; done
a dog a cat a fish

$ for i in "${animals[@]}"; do echo $i; done
a dog
a cat
a fish

$()等同于:``(反引号):运行一段命令

$(()) 进行数字运算 
a=3;b=2;c=5
echo $((a+b*c))

你可能感兴趣的:(shell 中 $ 的各种含义)