简单赋值情况
s = "Hello";
?
一次给多个变量赋值的情况
s1 = s2 = "Same";
?
赋值为整数(将整数转换为字符串)
int i = 1234;
s = String.valueOf(i);
或 s = "" + i;
?
赋值操作的形式为 VAR=STRING
记住:等号的两边不能有空格!
Advanced Bash-Scripting Guide: 4.2. Variable Assignment 写道 =不包含任何特殊字符的情形
示例:S1=Literal
示例:S1='Literal'
示例:S1="Literal"
示例:S1=$'Literal'
?
包含空格的情形
示例:S2=Hello\ World
示例:S2='Hello World'
示例:S2="Hello World"
示例:S2=$'Hello World'
?
包含单引号的情形
示例:S3=Yes,\ I\'m\ Basher
示例:无法纯粹用单引号来做到
示例:S3="Yes, I'm Basher"
示例:S3=$'Yes, I\'m Basher'
?
包含双引号的情形
示例:S4=It\ is\ very\ \"Stupid\".
示例:S4='It is very "Stupid".'
示例:S4="It is very \"Stupid\"."
示例:S4=$'It is very "Stupid".'
?
多行文本的情形
示例:S5='Hello
World'
示例:S5="Hello
World"
示例:S5=$'Hello
World'
?
普通变量
示例:S2=$S1
示例:S2=${S1}
?
位置参数
示例:S3=$1
示例:S3=${1}
?
格式:S2=`commandline`
格式:S2=$(commandline)
格式:S2="`commandline`"
格式:S2="$(commandline)"
?
创建一个脚本,输出Sha-Bang和Bash执行文件路径,也就是脚本的第一行。
[root@jfht ctmw]# echo '#!'$(which bash) > script.sh
[root@jfht ctmw]# cat script.sh
#!/bin/bash
[root@jfht ctmw]#
?
示例:S1="Your account is ${ACCOUNT}"
示例:S2="Current Working Directory is $(pwd)"
?
示例:S=
?
在Java中,我们可以写 a = b = "String";
但是在Bash中,我们只能这样写 A=$B B="STRING"
?
示例:A=$B B=$C
先把变量C赋值给B,再把变量B赋值给A。
注意不能写成:A=B=C,而 A=B B=C 的结果完全与此不同。
?
格式:CONTENT=$(cat filename)
注意:如果filename指定的文件是二进制数据文件,那么CONTENT实际的内容可能实际的不一致。
?
文本文件的情形
[root@jfht ~]# cat file.txt
1234
2345
4567
5678
[root@jfht ~]# ls -l file.txt
-rw-r--r-- 1 root root 20 09-07 07:48 file.txt
[root@jfht ~]# S=$(cat file.txt)
[root@jfht ~]# echo $S
1234 2345 4567 5678
[root@jfht ~]# echo "$S"
1234
2345
4567
5678
[root@jfht ~]# echo ${#S}
19
[root@jfht ~]#
上面的 ${#S} 是用来取得字符串长度的。
即使是文本文件,其长度也是不一致的,但字符串内容是一致的。
?
二进制文件的情形
[root@smsgw root]# ls -l /usr/bin/ac
-rwxr-xr-x??? 1 root???? root??????? 18452 2006-01-27? /usr/bin/ac
[root@smsgw root]# S=$(cat /usr/bin/ac)
[root@smsgw root]# echo ${#S}
13516
[root@smsgw root]# S="$(cat /usr/bin/ac)"
[root@smsgw root]# echo ${#S}
?????????? ?
13511
[root@smsgw root]#
上面的 ${#S} 是用来取得字符串长度的。
?
问题:为什么使用cat加载文件的内容与实际的文件内容会不同呢?
?
由于Shell中的变量是无类型的,所有直接将整数赋值给变量即可,无需任何转换手段。
格式:STR=SOME_INTEGER
但如果将一个算式赋值给变量,不会自动计算,可以采用如下几种方式:
格式1:STR=$[EXPR]
格式2:((STR=EXPR))
格式3:let STR=EXPR
格式4:declare -i STR=EXPR
格式5:STR=`expr EXPR`
格式6:STR=$(expr EXPR)
?
[root@jfht ~]# STR=1234
[root@jfht ~]# echo $STR
1234
[root@jfht ~]# STR=1234+4321
[root@jfht ~]# echo $STR
???
1234+4321
直接将算式赋值给变量,还是算式本身,不会是计算结果。
[root@jfht ~]# STR=$[1234+4321]
[root@jfht ~]# echo $STR
??????
5555
[root@jfht ~]# ((STR=1234+4321))
[root@jfht ~]# echo $STR??????
???
5555
[root@jfht ~]# let STR=1234+4321
[root@jfht ~]# echo $STR?????
? ?
5555
[root@jfht ~]# declare -i STR=1234+4321
[root@jfht ~]# echo $STR
????????????? ?
5555
[root@jfht ~]# STR=`expr 1234+4321`
[root@jfht ~]# echo $STR
????????? ?
5555
[root@jfht ~]# STR=$(expr 1234+4321)
[root@jfht ~]# echo $STR
?????????? ?
5555
[root@jfht ~]#
?
本文链接:http://codingstandards.iteye.com/blog/1167238 ? (转载请注明出处)
返回目录:Java程序员的Bash实用指南系列之字符串处理(目录)?
上节内容:Bash字符串处理(与Java对照) - 2.字符串的表示方式(字符串常量)
下节内容:Bash字符串处理(与Java对照) - 4.字符串输出
?
?