有一些关于shell变量名的规则:
-
变量名可由字母数字字符(字母和数字)和下划线字符组成。
-
变量名的第一个字符必须是一个字母或一个下划线。
-
变量名中不允许出现空格和标点符号。
注意在赋值过程中,变量名,等号和变量值之间必须没有空格。那么,这些值由什么组成呢? 可以展开成字符串的任意值:
a=z # Assign the string "z" to variable a.
b="a string" # Embedded spaces must be within quotes.
c="a string and $b" # Other expansions such as variables can be
# expanded into the assignment.
d=$(ls -l foo.txt) # Results of a command.若是在上层目录需要d=$(ls -l ../foo.txt)
e=$((5 * 7)) # Arithmetic expansion.
字符串变量
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了,哈哈),字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号
str='this is a string'
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)
双引号
your_name='qinjx'
str="Hello, I know your are \"$your_name\"! \n"
- 双引号里可以有变量
- 双引号里可以出现转义字符
字符串操作
拼接字符串
your_name="qinjx"
greeting="hello, "$your_name" !" //输出hello,qinjx
greeting_1="hello, ${your_name} !" //输出hello,qinjx
greeting_1="hello, "${your_name}" !" //输出hello,qinjx
greeting_1="hello, \"${your_name}\" !" //输出hello,"qinjx"
获取字符串长度:
string="abcd"
echo ${#string} #输出:4 //字符串前面加#,输出字符串长度
提取子字符串
string="alibaba is a great company"
echo ${string:1:4} #输出:liba
查找子字符串
string="alibaba is a great company"
echo `expr index "$string" is`#输出:8,这个语句的意思是:找出单词is在这名话中的位置。小撇是在~下面那个。