加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux Shell中‘$‘符号的N种用法

发布时间:2020-12-14 00:26:41 所属栏目:Linux 来源:网络整理
导读:在Shell中 $ 是一个特殊的字符,在不同场景中有不同的用法。 引用变量 使用 $ 直接引用变量,包括循环变量。 1 2 3 [email?protected]:~# x=1 [email?protected]:~# echo $x 1 双引号 " 括起来的字符串支持变量插值。 1 2 3 [email?protected]:~# x=1 [email

在Shell中$是一个特殊的字符,在不同场景中有不同的用法。

引用变量

使用$直接引用变量,包括循环变量。

1
2
3
[email?protected]:~# x=1
[email?protected]:~# echo $x
1

双引号"括起来的字符串支持变量插值。

1
2
3
[email?protected]:~# x=1
[email?protected]:~# echo "x = $x"
x = 1

使用${}作为单词边界。

1
2
3
[email?protected]:/var/log/nginx# x=1
[email?protected]:/var/log/nginx# echo "x = ${x}yz"
x = 1yz

使用${#}获取变量字符串长度。

1
2
3
[email?protected]:/var/log/nginx# s=hello
[email?protected]:/var/log/nginx# echo "s.length = ${#s}"
s.length = 5

引用脚本或函数参数

基于下标的引用方式,0表示shell脚本文件名,n从1开始表示第n个参数,第1个参数是$1。

1
2
3
4
5
[email?protected]:~# echo 'echo $0 $1' > test.sh
[email?protected]:~# cat test.sh
echo $0 $1
[email?protected]:~# sh test.sh 1 2 3
test.sh 1

注意,单引号'括起来的字符串不会进行插值。

使用$#获取脚本或函数参数个数。

1
2
3
[email?protected]:~# echo 'echo $#' > test.sh
[email?protected]:~# sh test.sh 1 2 3
3

使用[email?protected]$*以数组的形式引用参数列表。它们的区别在于使用双引号括起来用时,假设传入的参数为1 2 3,那么"[email?protected]"的值为”1”、”2”、”3”三个变量,$*的值为”1 2 3”一个变量。

test.sh

1
2
3
4
5
6
7
8
9
10
echo using '[email?protected]'
for x in "[email?protected]"
do
echo + $x
done
echo using '$*'
for x in "$*"
do
echo - $x
done
1
2
3
4
5
6
7
[email?protected] 大专栏 ?Linux Shell中‘$‘符号的N种用法7ws4eZ:~# sh test.sh 1 2 3
using [email?protected]
+ 1
+ 2
+ 3
using $*
- 1 2 3

上一次命令的返回值

使用$?上一次命令的返回值。0表示执行成功,非零值表示出错,注意这里与C语言的不同之处。

$?的命名很好记,问号表示询问OS,上一次执行的命令结果怎么样啦?需要注意每执行一个命令都会覆盖这个变量。

1
2
3
4
5
6
[email?protected]:~# true
[email?protected]:~# echo $?
0
[email?protected]:~# false
[email?protected]:~# echo $?
1

执行并获取命令输出

使用$()执行并获取命令输出赋值给变量,等同于双引号的功能。

1
2
3
4
[email?protected]:~# echo `date`
Sat Dec 2 15:07:50 CST 2017
[email?protected]:~# echo $(date)
Sat Dec 2 15:07:56 CST 201

表达式求值

使用$[]对表达式进行求值,与expr命令不同的是,$[]用于插值,而expr则将值输出。

1
2
3
4
5
6
[email?protected]:~# $[ 1 + 1 ]
2: command not found
[email?protected]:~# echo $[ 1 + 1 ]
2
[email?protected]:~# expr 1 + 1
2

获取当前进程ID

使用$$获取当前进程ID。

1
2
[email?protected]:~# echo $$
16150

后台运行的最后一个进程ID

使用$!获取后台运行的最后一个进程ID,在命令后面使用&即可以创建后台进程。

1
2
3
4
5
[email?protected]:~# tail -f /var/log/nginx/access.log &
[1] 16176
[email?protected]:~# echo $!
16176
[email?protected]:~# kill $!

获取shell选项

使用$-获取当前shell的选项。具体的选项意义可以参考segmentfault上的回答。

1
2
[email?protected]:~# echo $-
himBH

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读