`

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  
写得很好

相关推荐

    fmath-mathml-java.jar.rar

    通过这个工具,你可以将LaTeX公式转换为MathML,或者将MathML代码转化为LaTeX字符串,从而在不同环境下灵活运用。 三、LaTeX到MathML的转换 在LaTeX到MathML的转换过程中,`fmath-mathml-java.jar`首先解析LaTeX...

    Java-JDK-11.0.8(Windows & Mac os) 下载

    5. **文本块(Text Blocks)**:预览特性,允许在代码中方便地插入多行字符串,减少转义字符的使用。 在下载和安装Java JDK 11.0.8之后,开发者可以使用`javac`编译Java源代码,生成字节码(`.class`文件)。通过`...

    jdk-11.0.16.1-linux-x64-bin.tar

    2. **本地变量类型推断(var关键字)**:允许开发者在lambda表达式、for-each循环以及局部变量声明中使用var关键字,让代码更加简洁。 3. **HTTP客户端API(HttpClient)**:内置的HTTP客户端库,替代了旧的...

    wget-1.14-15.el7.x86_64.rpm

    9. **用户代理伪装**:`--user-agent=字符串`可以改变发出请求的用户代理标识。 10. **证书验证**:对于HTTPS,可以使用`--ca-certificate`指定自定义CA证书,`--no-check-certificate`禁用证书检查。 `wget`的...

    perl-5.26.1.tar.gz

    - 支持Unicode 9.0,增强了字符串和正则表达式的处理能力。 - `List::Util`模块新增了一些实用函数,如`minmax`,方便处理列表数据。 - 错误消息和诊断信息的改进,提高了调试的便利性。 Perl语法特点: - 采用C...

    最新版linux jdk-11.0.8_linux-x64_bin.tar.gz

    4. **文本块(Text Blocks)**:新语法特性,用于处理多行字符串,减少转义字符的使用,提高代码可读性。 5. **改进的垃圾收集器**:包括ZGC(Z Garbage Collector)和Shenandoah,提供了更低的暂停时间,适合大...

    jdk-11.0.18-linux-aarch64-bin.tar.gz

    5. **文本块(Text Blocks)**:Java 11引入了文本块(多行字符串字面量)的预览特性,允许程序员方便地处理多行文本,减少字符串连接操作和转义字符的使用。 6. **其他语言特性和API增强**:包括对TLS协议的更新、...

    最新版linux jdk-11.0.15.1_linux-x64_bin.tar.gz

    - **字符串切片**:提供`String#lines()`方法,方便处理文本文件。 - **ZGC**:一种低延迟的垃圾收集器,适用于大内存应用。 **2. JDK 11.0.15.1更新** JDK 11.0.15.1是一个小版本更新,主要修复了已知的漏洞和优化...

    最新版linux jdk-11.0.16.1_linux-x64_bin.tar.gz

    5. **改进的字符串处理**:如`isBlank()`, `strip()`, `stripIndent()`, 和 `stripTrailing()`方法。 6. **反应式流**:支持非阻塞I/O,适应现代并发编程。 此外,JDK 11还包含对HTTP客户端的内置支持,以及对TLS...

    jdk-11.0.16.1_linux-x64_bin.tar.gz

    4. **文本块(Text Blocks,JEP 378)**:为Java源代码引入了多行字符串文字,使得处理多行字符串变得更加简单。 5. **强类型字符串连接(JEP 359)**:增强了字符串连接操作的性能,使得在连接字符串时无需创建...

    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. ...

    Python库 | frida-14.2.18-py3.8-linux-i686.egg

    1. **安全审计**:在安全研究中,Frida常用于检测潜在的安全漏洞,例如检测缓冲区溢出、格式字符串漏洞等。 2. **自动化测试**:在软件测试中,Frida可以用来模拟用户输入,检查程序的响应和行为。 3. **逆向工程*...

    BASH 中的字符串处理

    字符串处理是BASH编程中的重要组成部分,它允许用户对文本数据进行操作,包括截取、替换、比较等。这篇博文将深入探讨BASH中的字符串处理技巧。 一、字符串定义与赋值 在BASH中,字符串可以被赋值给变量,常见的...

    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 jdk-11.0.15_linux-x64_bin.tar.gz

    3. **字符串切片**:提供一种高效访问字符串子序列的方法,而无需复制整个字符串。 4. **并行流收集器**:改进了并行流的性能,特别是在大型数据集上。 5. **模块化系统**(Jigsaw项目):进一步增强了Java的模块...

    php-5.3.10.tar.gz

    5. `lib`:提供了一些基础库,如内存管理、字符串处理等。 四、源码学习与调试 源码学习是提升PHP开发技能的重要途径。通过阅读源码,可以了解PHP如何处理请求、如何执行脚本、如何管理内存等。对于开发者来说,...

    bash笔记-02-变量.doc

    - **字符串变量(String Variables)**: 用于存储文本信息。 - **整数变量(Integer Variables)**: 用于存储整数值。 - **常数变量(Constant Variables)**: 定义后其值不可改变。 - **数组变量(Array Variables...

    bash.tar.gz

    2. **命令替换**:通过反引号 ` 或 $( ) 将命令的输出作为字符串使用。 3. **重定向**:&gt;``, `&gt;&gt;`, `分别用于覆盖输出、追加输出和读取输入。 4. **条件表达式**:用于 if 语句,如 `[ expression ]` 或 `[[ ...

    jdk-11.0.12_osx-x64_bin.tar.gz

    4. **文本块**:增强了多行字符串的表示,减少了转义字符的使用。 5. **动态类型方法句柄**:允许在运行时动态获取方法句柄,增强了反射机制。 总的来说,"jdk-11.0.12_osx-x64_bin.tar.gz"是一个重要的开发工具,...

    openjdk-18.0.1.1(openjdk-18.0.1.1_linux-aarch64_bin.tar.gz)

    - **Text Blocks**:在Java中引入了多行字符串文本块,方便编写和阅读包含大量文本的代码。 - **Foreign-Memory Access API**:提供了一种安全的方式来访问Java虚拟机外部的内存,用于与非Java系统的互操作。 **3...

Global site tag (gtag.js) - Google Analytics