文章目录
- 一、定义变量
- 二、使用变量
- 三、将命令的结果赋值给变量
- 四、变量操作
在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。
这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。例如在C语言或者 C++ 中,变量分为整数、小数、字符串、布尔等多种类型.
一、定义变量
和编程语言不同,shell脚本的 = 两端不能有空格,
如果变量不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;如果变量包含了空白符,那么就必须使用引号包围起来。这里又可以分为单引号和双引号。
以单引号’ '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。
以双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义
我们看代码:
#!/bin/bashvalue_0='shell 学习1'
value_1="shell 学习2"value_2='打印${value_0}'
value_3="打印${value_0}"value_4='打印${value_0}'
value_5="打印${value_1}"echo $value_0
echo $value_1
echo $value_2
echo $value_3
echo $value_4
echo $value_5
xhh@cluo:~/study/shell$ ./shell-1.sh
shell 学习1
shell 学习2
打印${value_0}
打印shell 学习1
打印${value_0}
打印shell 学习2
二、使用变量
使用一个定义过的变量,只要在变量名前面加美元符号$即可。
value_0='shell 学习1'
value_3="打印${value_0}"
变量名外面的花括号{ }是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,因为我们一般不会使用中文所以有时候就会出现下面的情况:
#!/bin/bashvalue_0='shell study 1'value_1="echo $value_0xxxxxx"
value_2="echo ${value_0}xxxxxx"echo $value_0
echo $value_1
echo $value_2
xhh@cluo:~/study/shell$ ./shell-2.sh
shell study 1
echo
echo shell study 1xxxxxx
所以为了规范,我们一般都会加上{}
三、将命令的结果赋值给变量
Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:
variable=`command`
variable=$(command) // 这个相对来说看起来更加直接
我们可以直接ubunt的shell终端上运行
xhh@cluo:~/study/shell$ cluo=$(cat shell-2.sh)
xhh@cluo:~/study/shell$ echo $cluo
#!/bin/bash value_0='shell study 1' value_1="echo $value_0xxxxxx" value_2="echo ${value_0}xxxxxx" echo $value_0 echo $value_1 echo $value_2
四、变量操作
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bashvalue_0="shell study 1"readonly value_0value_0="shell study 2"
xhh@cluo:~/study/shell$ ./shell-4.sh
./shell-4.sh: 行 7: value_0: 只读变量
使用 unset 命令可以删除变量。
变量被删除后不能再次使用;unset 命令不能删除只读变量
#!/bin/bashvalue_0="shell study 1"
value_1="shell study 4"readonly value_0unset value_0
unset value_1value_0="shell study 2"echo $value_1
echo $value_0
xhh@cluo:~/study/shell$ ./shell-4.sh
./shell-4.sh: 第 8 行: unset: value_0: 无法取消设定: 只读 variable
./shell-4.sh: 行 11: value_0: 只读变量shell study 1