`

Bash字符串处理(与Java对照) - 3.给(字符串)变量赋值

阅读更多

Bash字符串处理(与Java对照) - 3.给(字符串)变量赋值

In Java

简单赋值情况

s = "Hello";

 

一次给多个变量赋值的情况

s1 = s2 = "Same";

 

赋值为整数(将整数转换为字符串)

int i = 1234;

s = String.valueOf(i);

或 s = "" + i;

 

In Bash

赋值符号(=)

赋值操作的形式为 VAR=STRING

记住:等号的两边不能有空格!

Advanced Bash-Scripting Guide: 4.2. Variable Assignment 写道
=
the assignment operator (no space before and after)

Caution
Do not confuse this with = and -eq, which test, rather than assign!
Note that = can be either an assignment or a test operator, depending on context.
 

赋值为字符串常量

不包含任何特殊字符的情形

示例: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.字符串输出

 

 

5
1
分享到:
评论
1 楼 xueqiang 2011-09-08  

相关推荐

    Advanced Bash-Scripting Guide <>

    4.2. 变量赋值 4.3. Bash 变量是不分类型的 4.4. 特殊的变量类型 5. 引用(翻译的可能有问题,特指引号) 5.1. 引用变量 5.2. 转义(\) 6. 退出和退出状态 7. Tests 7.1. Test 结构 7.2. 文件测试操作 7.3. 其他比较操作...

    Linux高级bash编程

    变量赋值 4.3. Bash变量是不分类型的 4.4. 特殊的变量类型 5. 引用(翻译的可能有问题,特指引号) 5.1. 引用变量 5.2. 转义(\) 6. 退出和退出状态 7. Tests 7.1. Test结构 7.2. 文件测试操作 7.3. 其他...

    高级Bash脚本编程指南.pdf

    变量赋值 4.3. Bash变量是不区分类型的 4.4. 特殊的变量类型 5. 引用 5.1. 引用变量 5.2. 转义 6. 退出和退出状态码 7. 条件判断 7.1. 条件测试结构 7.2. 文件测试操作符 7.3. 其他比较操作符 7.4. ...

    高级bash脚本编程指南(中英文合集)

    4.2. 变量赋值 4.3. Bash 变量是不分类型的 4.4. 特殊的变量类型 5. 引用(翻译的可能有问题,特指引号) 5.1. 引用变量 5.2. 转义(\) 6. 退出和退出状态 7. Tests 7.1. Test 结构 7.2. 文件测试操作 7.3. ...

    宋劲彬的嵌入式C语言一站式编程

    3. 数值字符串转换函数 4. 分配内存的函数 26. 链表、二叉树和哈希表 1. 链表 1.1. 单链表 1.2. 双向链表 1.3. 静态链表 1.4. 本节综合练习 2. 二叉树 2.1. 二叉树的基本概念 2.2. 排序二叉树 3. 哈希表 27. 本阶段...

    学习shell必备(CN).chm

    4.2. 变量赋值 4.3. Bash变量是不区分类型的 4.4. 特殊的变量类型 5. 引用 5.1. 引用变量 5.2. 转义 6. 退出和退出状态码 7. 条件判断 7.1. 条件测试结构 7.2. 文件测试操作符 7.3. 其他比较操作符 7.4. 嵌套的if/...

    Bash技巧:把变量赋值为换行符(判断文件是否以换行符结尾)

    可以看到,把 newline 变量赋值为 ‘n’,得到的是 n 这个字符串,而不是换行符自身。 这是 bash 和 C 语言不一样的地方。 在 C 语言中,’n’ 对应换行符自身,只有一个字符;而 “n” 对应一个字符串。 但是在 ...

    Linux Shell脚本系列教程(三):变量和环境变量

    无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。有一些特殊的变量会被shell环境和操作系统保留,用来存储一些特别的值,这类变量就称为环境变量,相信大家对环境变量也并不陌生,因为即使在windows...

    cmd操作命令和linux命令大全收集

    CMD命令:开始-&gt;运行-&gt;键入cmd或command(在命令行里可以看到系统版本、文件系统版本) 命令大全 1. gpedit.msc-----组策略 ...set 指定环境变量名称=要指派给变量的字符 设置环境变量 set 显示当前所有的环境变量...

    详解shell 变量

    在Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为...

    shell编程学习笔记

    $*:以一个单字符串显示所有项脚本传递的参数。与位置变量不通,此选项参数可超过9个;$$:脚本运行的当前进程ID号;&!:后台运行的最后一个进程的进程ID号;$@:与$#相同,但是使用时加引号,并在引号中返回每个...

    shell算数运算

    如果给整型变量赋一个字符串值,则bash将把变量赋值为0。可以对已定义的整型变量执行算术运算(如果变量未被定义为整型变量, 内置的let命令也允许算术操作。见本节let命令部分)。如果给整型变量赋一个浮点数值,则...

    bash脚本编程学习之算术运算与文件查找

    在bash里面变量默认是以字符串类型来存储的;就算我们在这里声明的这两个变量为整数也不会做运算;declare命令-i可以声明我们定义的变量为整型bash也只会做变量替换; declare -i num3=9 declare -i num4=1 echo ...

    RED HAT LINUX 6大全

    11.8.3 从numark委托子域给sylvia 219 11.8.4 测试subdomain.domain.cxm 委托 220 11.9 添加从DNS服务器 220 11.9.1 mtx的更改 221 11.9.2 numark的更改 222 11.10 DNS问题解决与调试 222 11.10.1 使用脚本对DNS...

    shell脚本命令行参数简介

    之所以用到命令行参数,关键...shell脚本自动将命令行参数赋值给各个位置变量。同时输入多个参数可以是数值也可以是字符串)时,必须使用空格分隔要想在参数值中包含空格,就必须使用单引号或双引号)当参数多于9个后,

    Shell脚本专家指南

    第26章 平面文件中的变量赋值 第27章 读取管道输入 第28章 使用cat的自由格式输出 第29章 自动交互处理 第3部分 有用的脚本实例 第30章 使用procmail自动处理邮件 30.1.procmailrc文件 30.2 使用示例 30.3 代码 第...

    common-scripts:这是程序员最常用的脚本

    语法级别bash syntax编写脚本过程中,常用的或必须掌握的语法点有变量,声明、赋值、使用字符串,单引号 / 双引号(区别)、位置、截取、拼接数组,定义、赋值、取值、长度、遍历参数,传递、取值、特殊字符处理参数...

Global site tag (gtag.js) - Google Analytics