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

 

 

Bash语言的数据类型 Bash是一种功能强大的脚本语言,尽管它在数据类型的支持上不如其他现代编程语言丰富,但通过灵活地使用变量、数组和关联数组,我们仍然可以高效地处理任务。适当的字符串操作和函数的定义,可以使得Bash脚本更加灵活与可重用。理解Bash中的数据类型和操作方式,有助于我们编写出更高效的脚本,提高工作效率。无论你是系统管理员、开发者还是数据分析师,掌握Bash语言的基本数据类型和操作技巧,都能让你在自动化脚本编写和任务调度上游刃有余。希望本文能对你深入理解Bash中的数据类型提供帮助。 阅读详情

相关推荐

ERA5数据驱动WRFV4.4实战:单层嵌套配置与关键报错排查指南

本文详细介绍了使用ERA5再分析数据驱动WRFV4.4模式进行单层嵌套模拟的完整实战流程。内容涵盖从数据精准下载、WPS前处理配置、WRF核心参数设置到高频报错的深度排查与解决方案,旨在帮助初学者在有限服务器资源下,高效完成WRF模拟并规避常见陷阱。

q5r6s7的博客 770

bash变量赋值及字符串的操作

转载:http://www.bsdlover.cn/html/24/n-3224.html Bash中的变量 1.用户定义的变量 用户定义的变量有字母数字及下划线组成,并且变量名的第一个字符不能为数字. 与其它UNIX名字一样,变量名是大小写敏感的. 对于变量,用户可按如下方式赋值: name = value 在引用变量时,需在前面加$符号,用户也可以在变量间进行相互赋值,如:

zhangxinrun的专栏 1万+

电商客服效率翻倍!手把手教你用影刀RPA+AI搭建智能回复系统(附实战配置)

本文详细介绍了如何利用影刀RPA+AI技术搭建电商智能客服系统,实现24小时在线回复,大幅提升客服效率。通过零代码配置、Excel词库管理和AI语义理解,系统能处理80%常规咨询,响应速度稳定在3秒内,特别适合中小电商降低成本并提升服务质量。

weixin_42520661的博客 548

linux 字符串赋值给变量,bash变量赋值及字符串的操作

1.用户定义的变量用户定义的变量有字母数字及下划线组成,并且变量名的第一个字符不能为数字.与其它UNIX名字一样,变量名是大小写敏感的.对于变量,用户可按如下方式赋值:name = value在引用变量时,需在前面加$符号,用户也可以在变量间进行相互赋值,如:(前面的$是命令提示符)$ JOHN = john$ NAME = $JOHN$ echo Hello $NAMEHello john也可以...

weixin_28363123的博客 3400

【excel+vba】一表拆多表+不同收件人附带不同附件

快捷处理:拆分多个不同表 给不同人发送不同内容且附带附件

weixin_42779327的博客 2968

Oracle EBS FA 创建成批增加执行时间长且报错

摘要 Oracle EBS系统在执行"创建成批增"请求时出现长时间运行并报错(ORA-00603和ORA-03114)。

陈显平的专栏-Oracle EBS 173

shell 把以空格分隔的变量 分割后的每个字段赋值给变量

继承 继承中有两个概念。基类和派生类。直接或者间接继承基类的类称为派生类。一般我们在基类中定义一些共同拥有的成员,在派生类中定义各自特有的成员。 对于某些函数,我们希望派生类对于各自的类具有不同的实现方式。在这种情况下,我们可以把这些函数声明成虚函数。 如果派生类没有覆盖它继承的虚函数,则该虚函数的行为类似于其他普通成员,派生类会直接继承其在基类中的版本。 派生类对象不能直接初始化基类的成

暖心~的博客 3万+

基于 51 单片机的智能手势控制小车设计与实现

智能手势控制小车以STC89C52RC 单片机为控制核心,通过手势识别模块采集用户手势指令,经单片机处理后驱动电机执行前进、后退、左转、右转等动作。该项目融合了传感器技术、单片机编程和电机驱动技术,具有成本低、易实现、互动性强的特点,适合作为嵌入式系统入门实践案例。本项目成功实现了基于 51 单片机的智能手势控制小车,通过 APDS-9960 模块采集手势信号,经单片机处理后驱动电机完成基本动作,验证了 “传感器 + 单片机 + 执行器” 的嵌入式系统设计思路。

weixin_42300449的博客 177

java 字符串给字符串赋值_Java开发笔记(三十四)字符串的赋值及类型转换

不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工。为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类型允许保存一整串字符,并对字符串进行各种处理。字符串类型不属于基本类型,它的用法与包装类型更为接近。例如给字符串变量赋初始值,就有多达四种的赋值形式(包装类型只有三种赋值),分别介绍如下:1、被双引号...

weixin_42517044的博客 9671

特别章节-0.1 SolidWorks导出机械臂的URDF模型各个关节坐标系设置

通过Solidworks导出机械臂的URDF模型文件,建立机械臂的各个关节坐标系的规则以及注意点,详细步骤

六眼飞鱼的博客 1万+

利用人工神经网络在Abaqus中实现本构模型的网格粗化计算框架:详细指南与实践

在这篇文章中,我们详细介绍了如何在Abaqus中实现基于人工神经网络(ANN)的本构模型以进行网格粗化的计算框架。我们通过两个主要模块——数据生成器模块和ANN训练模块,实现了这一计算框架,并将训练好的ANN集成到Abaqus的用户材料子程序(UMAT)中,创建了一个基于ANN的本构模型。我希望这篇文章能帮助到那些希望在Abaqus中实现基于ANN的本构模型的读者,同时,我也非常欢迎大家提出宝贵的意见和建议,让我们共同进步。

qq_38334677的博客 1714

BASH字符串处理:字符串分割为数组

http://codingstandards.iteye.com/blog/1164910 Bash字符串处理(与Java对照) - 25.字符串分割(成数组) In Java String.split  String[]     split(String regex)           根据给定的正则表达式的匹配来拆分此字符串。  String[]

zouyongjin的专栏 7763

【Kubernetes】Kubernetes 安全沙箱深度对比:gVisor vs Kata Containers

Kubernetes安全沙箱深度对比:gVisor和Kata Containers在架构、性能与安全性方面各有特点。gVisor通过用户态内核(Sentry)实现软件隔离,启动快(毫秒级)但CPU开销大(20-30%),适合Web服务等场景。Kata Containers采用轻量级虚拟机提供硬件级隔离,启动较慢(1-2秒)但兼容性更好,适合金融等高安全需求。测试显示gVisor在动态请求下性能下降33%,而Kata性能接近原生。建议根据场景选择:多租户/快速启动用gVisor,敏感数据/极致安全用Kata,

九师兄 178

Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取

Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取 In Java 字符串替换  String     replace(char oldChar, char newChar)           返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。  String     replace(CharSe...

巨人站在肩膀上 633

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

shell变量及赋值

1、变量的定义Bash中的变量操作相对比较简单,不像其他高级编程语言(如C/C++、Java等)那么复杂。在定义一个新的变量时,一般不需要提前进行声明,而是直接指定变量名称并赋给初始值(内容)即可格式:变量名=变量值变量名:临时存放数据的地方变量值:临时的可变化的数据等号两边没有空格。变量名称需以字母或下划线开头,名称中不要包含特殊字符(如+、-、*、/、.、?、%、&、#等)除了上述赋值操作以外,还可以使用 Bash 的内置命令 read 来给变量赋值。

2201_75549363的博客 2376

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

Bash字符串处理(与Java对照) - 1.(字符串)变量声明 In Java Java中变量名称的规则 Java变量名称是区分大小写的。变量名称是一个合法的标识符,没有长度限制,由Unicode字符、数字、美元符、下划线组成,不能是关键字和保留字。最好是字母开头,跟上字母或数字,采用Camel命名规则。 The Java Tutorials (http://download.oracl...

巨人站在肩膀上 211

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java 字符串截取替换_Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取...

Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取In Java字符串替换?String ??? replace(char oldChar, char newChar)????????? 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。?String ??? replace(CharSequence target, C...

weixin_39601641的博客 168

Java字符串替换前缀_bash 进阶之变量替换与字符串操作

摘自《高级bash脚本编程指南》变量替换处理和(或)扩展变量${parameter}与$parameter相同, 也就是变量parameter的值. 在某些上下文中, ${parameter}很少会产生混淆.可以把变量和字符串组合起来使用.1 your_id=${USER}-on-${HOSTNAME}2 echo "$your_id"3 #4 echo "Old \$PATH = $PATH"5...

weixin_32004383的博客 688

Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较)...

Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较) In Java String.compareTo int     compareTo(String anotherString)           按字典顺序比较两个字符串。如果返回0,表示相等;<0表示小于;>0 表示大于。   int     compareToIgnor...

巨人站在肩膀上 806

Linux Shell基础-Bash变量

变量名称不可以数字开头,可以使用字母,数字,下划线 变量赋值name=name 切记等号‘=’两边不能右括号 若想让变量从name增加为name_my可以用name=name=name={name}_my更新name变量的值 把date变量赋值为date命令的结果可以date=$(date) 把date赋值为date命令的结果 环境变量可以添加,查看,虽然不可以更改名称,但可以修改...

qq_43149127的博客 208

[linux] shell 变量 字符串 数组

变量 定义变量时,变量名不加美元符号$ your_name="qm" #变量名和等号之间不能有空格 变量名的命名须遵循如下规则: 首个字符必须为字母(a-z,A-Z)。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字)。 除了显式地直接赋值,还可以用语句给变量赋值,如: for fil...

aefg95955的博客 986

Bash字符串处理(与Java对照) - 12.字符串连接

Bash字符串处理(与Java对照) - 12.字符串连接 In Java String.concat String     concat(String str)           将指定字符串联到此字符串的结尾。   String newStr = str.concat(str2);   StringBuilder.append & StringBuffer...

巨人站在肩膀上 171

Linux里面Bash的使用方法

2021SC@SDUSC Shell shell是一个程序,可以称之为壳程序,用于用户与操作系统进行交互。用来区别与核,相当于是一个命令解析器,Shell有很多中,这里列出其中几种 Bourne SHell(sh) Bourne Again SHell(bash) C SHell(csh) KornSHell(ksh) zsh 各个shell的功能都差不太多,在某些语法的下达下面有些区别,Linux预设就是bash。这里主要介绍bash bash bash命令是sh命令的超集,大多数sh脚本

zhuizong8的博客 9888

Bash编程2——变量

Bash编程002——变量 在任何一门程序设计语言中, 变量都是必不可少的。在shell中变量的涵义跟其他语言中的变量涵义大同小异,都是保存用户数据的一块内存空间,变量名就是这块空间的地址。 在程序的执行过程中,保存数据的内存空间的内容可能会不断变化,但是代表内存地址的变量名基本保持不变。(在shell中不存在指针的概念) 变量命名 在shell中变量的名...

若梦的博客 258

Bash 变量命名规则与类型使用

项目说明定义name=value(等号两边不能有空格作用域当前 Shell 进程继承不被子进程继承生命周期Shell 退出前存在是否可修改是temp_dir="/tmp/app_$$" # $$ 是当前 PID变量含义示例PATH可执行文件搜索路径HOME用户主目录/home/userPWD当前工作目录/tmpOLDPWD上一个目录/varSHELL当前 Shell/bin/bashUSERLOGNAME当前用户aliceUID用户 ID1000LANGLC_ALL。

qq_52537313的博客 713

3.Shell 变量入门:变量定义、赋值、取值($var)及环境变量与局部变量区别详解

简单地说,变量名是用一个固定的字符串(字符、数字和下划线的组合,不能以数字开头)代替更多、更复杂的内容,该内容里可能还会包含变量、路径、字符串等其他的内容。变量是暂时存储数据的地方及数据标记,所存储的数据存在于内存空间中,通过正确地调用内存空间中变量的名字就可以取出与变量对应的数据。使用变量的最大好处就是使程序开发更为方便,当然,在编程中使用变量也是必须的,否则就很难完成相关的程序开发工作。# 定义变量,名字为username,对应的内容laoma# 打印变量的值laoma。

专注于云计算 1121
上一篇: Bash字符串处理(与Java对照) - 2.字符串的表示方式(字符串常量)
下一篇: Bash字符串处理(与Java对照) - 4.字符串输出
codingstandards
博客等级 码龄16年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值