`

Bash字符串处理(与Java对照) - 1.(字符串)变量声明

阅读更多

Bash字符串处理(与Java对照) - 1.(字符串)变量声明

In Java

Java中变量名称的规则

Java变量名称是区分大小写的。变量名称是一个合法的标识符,没有长度限制,由Unicode字符、数字、美元符、下划线组成,不能是关键字和保留字。最好是字母开头,跟上字母或数字,采用Camel命名规则。

The Java Tutorials (http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html) 写道
Variable names are case-sensitive. A variable's name can be any legal identifier — an unlimited-length sequence of Unicode letters and digits, beginning with a letter, the dollar sign "$", or the underscore character "_".The convention, however, is to always begin your variable names with a letter, not "$" or "_".
 

Java变量的类型

实例变量 Instance Variables (Non-Static Fields)
类变量 Class Variables (Static Fields)
局部变量 Local Variables
参数 Parameters

 

在Java中定义字符串变量

String s1;

String s2 = "1243";

String s3 = s1 + s2;

 

static final String BASH = "BASH";

 

In Bash

变量名称

Shell变量名称,只能包括字母、数字和下划线,并且只能以字母和下划线开头。通常情况下,Shell变量名称为大写的形式。(PS:找遍了 info bash、man bash、Advanced Bash-Scripting Guide等都没有找到关于Shell变量名称的规则说明,最后只能求助于互联网了。)

Unix - Using Shell Variables (http://www.tutorialspoint.com/unix/unix-using-variables.htm) 写道
Variable Names:
The name of a variable can contain only letters ( a to z or A to Z), numbers ( 0 to 9) or the underscore character ( _).
By convention, Unix Shell variables would have their names in UPPERCASE.

The following examples are valid variable names:
_ALI
TOKEN_A
VAR_1
VAR_2

Following are the examples of invalid variable names:
2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!

The reason you cannot use other characters such as !,*, or - is that these characters have a special meaning for the shell.
 

声明变量并赋值

在Bash中,变量并不区分类型,因此也不需要给变量指定类型。

在Bash中声明变量不需要显式进行,给变量赋值即可

格式:VAR=STRING

格式:VAR="STRING"

格式:VAR='STRING'

VAR为变量名

STRING为字符串

要注意的是,等号(=)两侧不能有空白。

如果字符串中间有空白或特殊字符,则需要用单引号或双引号引起来(参见“Bash字符串处理(与Java对照) - 2.字符串的表示方式(字符串常量)”)。

 

[root@jfht ~]# STR=hello

[root@jfht ~]# STR=hello\ world
[root@jfht ~]# STR="hello world"
[root@jfht ~]# STR='hello world'

 

引用变量(访问变量)

如果要得到VAR变量的值,就需要引用变量,有如下两种格式:

格式:$VAR

格式:${VAR}

 

Unix - Using Shell Variables (http://www.tutorialspoint.com/unix/unix-using-variables.htm) 写道
Accessing Values:
To access the value stored in a variable, prefix its name with the dollar sign ( $):

 

要注意的是,在给变量赋值时,变量名不能加上$。

格式:VAR=STRING    而不是 $VAR=STRING

 

使用declare命令来声明变量

在Bash中有一个declare指令,也可以定义变量,效果与VAR=STRING相同

格式:declare VAR=STRING

 

[root@jfht ~]# declare STR=dummy
[root@jfht ~]# echo $STR
dummy

 

声明变量但不设置初始值

格式:VAR=

等号右侧不写任何字符,即设置变量VAR为空。

 

[root@jfht ~]# VAR=
[root@jfht ~]# echo "$VAR"

[root@jfht ~]#

 

 

格式:declare VAR

使用declare声明变量,如果变量原来声明过,则其值不变,即没有复位变量的功能。

 

[root@jfht ~]# VAR=STRING
[root@jfht ~]# echo "$VAR"
STRING
[root@jfht ~]# declare VAR
[root@jfht ~]# echo "$VAR"
STRING

 

 

格式:declare VAR=

等同于VAR=

[root@jfht ~]# VAR=STRING
[root@jfht ~]# declare VAR=
[root@jfht ~]# echo "$VAR"

[root@jfht ~]#

 

判断变量是否声明?

格式:declare -p VAR

显示VAR变量是否声明过了,如果没有打印 not found,否则显示它的属性和值。

help declare 写道
The -p option
will display the attributes and values of each NAME.
 

[root@smsgw root]# declare -p VAR
-bash: declare: VAR: not found
[root@smsgw root]# echo $?
1
[root@smsgw root]# VAR=
[root@smsgw root]# declare -p VAR
declare -- VAR=""
[root@smsgw root]# echo $?
0
[root@smsgw root]# VAR=STRING
[root@smsgw root]# declare -p VAR
declare -- VAR="STRING"
[root@smsgw root]#

 

格式:${!VAR*}

这个参数扩展格式可以找出所有以VAR开头的变量来,但不能确切的知道是否有VAR这个变量,比如有可能还有VAR1。

man bash 写道
${!prefix*}
Expands to the names of variables whose names begin with prefix,
separated by the first character of the IFS special variable.

 

[root@jfht ~]# echo ${!VAR}

[root@jfht ~]# VAR=
[root@jfht ~]# echo ${!VAR}

[root@jfht ~]# echo ${!VAR*}
VAR
[root@jfht ~]# VAR1=
[root@jfht ~]# echo ${!VAR*}
VAR VAR1
[root@jfht ~]#

 

将变量声明为只读

格式:readonly VAR=STRING

help readonly 写道
readonly: readonly [-af] [name[=value] ...] or readonly -p
The given NAMEs are marked readonly and the values of these NAMEs may
not be changed by subsequent assignment. If the -f option is given,
then functions corresponding to the NAMEs are so marked. If no
arguments are given, or if `-p' is given, a list of all readonly names
is printed. The `-a' option means to treat each NAME as
an array variable. An argument of `--' disables further option
processing.

 

格式:declare -r VAR=STRING

help declare 写道
-r to make NAMEs readonly

 

取消变量、删除变量

格式:unset VAR

 

[root@jfht ~]# VAR=STRING
[root@jfht ~]# echo "$VAR"
STRING
[root@jfht ~]# unset VAR
[root@jfht ~]# echo "$VAR"

[root@jfht ~]#

 

定义局部变量

在默认情况下,变量都是全局变量。在前面加上local或者declare之后就变成了局部变量。

格式:local VAR

格式:local VAR=STRING

格式:declare VAR

格式:declare VAR=STRING

局部变量在函数中使用,如下所示

myfunc() {

    GGG=Global

    # GGG变量是全局变量

    local STR=Hello

    # STR变量的有效范围只在myfunc函数内

    declare VAR=World

    # VAR变量也是局部变量

}

 

 

[root@smsgw root]# myfunc(){
> GGG=Global
> local STR=Hello
> declare VAR=World
> }
[root@smsgw root]# GGG=YesGlobal
[root@smsgw root]# STR=NotHello
[root@smsgw root]# VAR=NotWorld
[root@smsgw root]# myfunc
[root@smsgw root]# echo $GGG $STR $VAR
Global NotHello NotWorld
[root@smsgw root]#

 

 

本文链接:http://codingstandards.iteye.com/blog/1165533   (转载请注明出处)

返回目录:Java程序员的Bash实用指南系列之字符串处理(目录) 

下节内容:Bash字符串处理(与Java对照) - 2.字符串的表示方式(字符串常量)

 

 

8
4
分享到:
评论
1 楼 xueqiang 2011-09-05  
写得很好

相关推荐

    Advanced Bash-Scripting Guide <>

    33.8.1. 被感染的脚本 33.8.2. 隐藏Shell 脚本源码 33.9. 移植话题 33.10. 在Windows 下进行Shell 编程 34. Bash, 版本 2 和 3 34.1. Bash, 版本2 34.2. Bash, 版本3 35. 后记 35.1. 作者后记 35.2. 关于作者 35.3. ...

    Linux高级bash编程

    33.8.1. 被感染的脚本 33.8.2. 隐藏Shell脚本源码 33.9. 移植话题 33.10. 在Windows下进行Shell编程 34. Bash, 版本 2 和 3 34.1. Bash, 版本2 34.2. Bash, 版本3 35. 后记 35.1. 作者后记 35.2. 关于...

    Linux简明教程.rar

    4.查找字符串 5.显示文件头部 6.显示文件尾部 7.忽略文件中的重复行 8.比较两个文件 9.按顺序显示文件内容 三、进程间通信命令----------------------------------------------------------------------------...

    高级Bash脚本编程指南.pdf

    操作字符串 9.3. 参数替换 9.4. 指定变量的类型: 使用declare或者typeset 9.5. 变量的间接引用 9.6. $RANDOM: 产生随机整数 9.7. 双圆括号结构 10. 循环与分支 10.1. 循环 10.2. 嵌套循环 10.3. 循环...

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

    9.2. 操作字符串 9.3. 参数替换 9.4. 指定类型的变量:declare 或者typeset 9.5. 变量的间接引用 9.6. $RANDOM: 产生随机整数 9.7. 双圆括号结构 10. 循环和分支 10.1. 循环 10.2. 嵌套循环 10.3. 循环控制 ...

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

    1. 字符串操作函数 1.1. 初始化字符串 1.2. 取字符串的长度 1.3. 拷贝字符串 1.4. 连接字符串 1.5. 比较字符串 1.6. 搜索字符串 1.7. 分割字符串 2. 标准I/O库函数 2.1. 文件的基本概念 2.2. fopen/fclose 2.3. ...

    2009 达内Unix学习笔记

    /字符串 从上往下查找匹配的字符串; ?字符串 从下往上查找匹配的字符串; n 继续查找。 四、退出命令 exit 退出; DOS内部命令 用于退出当前的命令处理器(COMMAND.COM) 恢复前一个命令处理器。 Ctrl+d 跟exit...

    学习shell必备(CN).chm

    9.2. 操作字符串 9.3. 参数替换 9.4. 指定变量的类型: 使用declare或者typeset 9.5. 变量的间接引用 9.6. $RANDOM: 产生随机整数 9.7. 双圆括号结构 10. 循环与分支 10.1. 循环 10.2. 嵌套循环 10.3. 循环控制 10.4....

    ubuntu部落(适合初学者,可以作为初学者的手册)

    安装JAVA 环境..................................... 18 安装多媒体播放驱动............................. 20 Linux 基础.............................................................. 23 Shell ................

    Bash:我发现不错的各种Bash脚本

    寻找恶意字符串。 -GUI库 -来自安全专家集合,为 。 编写有效的bash脚本 1.评论 始终使用注释,以便其他人可以更轻松地理解您的想法以及脚本/命令的目的。 #this is a singel comment &lt;# multiple lines of ...

    envsubst:Go程序包模拟bash环境变量替换

    包括对bash字符串替换功能的支持。 文献资料 。 支持功能 ${var^} ${var^^} ${var,} ${var,,} ${var:position} ${var:position:length} ${var#substring} ${var##substring} ${var%substring} ${var%%...

    shell字符串截取报错:Bad substitution的解决

    shell进行字符串截取 运行 ${GIT_COMMIT:0:6}报错: /tmp/jenkins7505855461406722507.sh: 4: /tmp/jenkins7505855461406722507.sh: Bad substitution 原因:两种shell语言解释器 bash和dash 查看当前/bin/sh ...

    Shell攻关之Bash变量

    (4)在Bash中,变量的默认类型都是字符串型 (5)在任何系统中,目录名、文件名、变量名都要有含义 3.变量的分类 (1)用户自己定义变量。变量自定义的 (2)环境变量:这种变量中主要保存的是和系统操作环境相关...

    leetcode下载-JavaDemon:Java恶魔

    学习字符串String 2019-12-05 公告 想让大家平时练习时就把 git 和 maven 用上,今晚讲一下它们的简单用法 在 github 上创建项目 创建 maven 项目,常见的配置,如何在 pom.xml 加入依赖项目 maven 编译 git 提交...

    bash.js:混合bash-likejs跑步者

    在这里,我们使用内置的id命令,该命令仅返回输入参数(这里是一个简单的字符串) 管子 &gt; square 2 | _ + 2 4 现在,通过使用管道运算符,它变得很有趣。 管道运算符将获取左侧的结果,并将其输入到_变量下的右侧。...

    安卓系统下的bash shell,ssh服务器,gcc编译器以及vim文本编辑器等

    如果给出的字符串不能作为唯一标识,则bash不予补全;再次敲击TAB键,bash会给出参考列表;如果参考列表中的内容过多,bash会询问是否显示该列表;根据提供的参数路径来进行补全,如果参数没有任何提示信息,则默认...

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

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

    linux bash中too many arguments问题的解决方法

    判断一个文件的内容是不是为空,使用语句: if test -z `cat filename` 当filename为空或者只有一行没有空格的字符串的时候,一切正常,反之,则会报:too many arguments,...可以用双引号将字符串自变量括起来消除

    Bash-Scripting:我的重击学习之旅

    Bash脚本 ...Shell支持变量,它们可以是字符串,整数,实数等,而无需数据类型声明。 变量可以由$VAR_NAME访问。 变量声明必须采用VAR_NAME=VAR_VALUE格式,并且之间不得有任何空格,例如VAR = VALUE

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

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

Global site tag (gtag.js) - Google Analytics