- 浏览: 4732006 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
bzhao:
你也应该可以这样:(not tested)./rbtunnel ...
在Bash脚本中怎么关闭文件描述符? -
bzhao:
如果有A进程原代码情况下,通过如下调用,把他的子进程继承关闭则 ...
在Bash脚本中怎么关闭文件描述符? -
Master-Gao:
楼主咋没分析下源码呢?
我使用过的Linux命令之dirname - 截取给定路径的目录部分 -
jiedushi:
tail -F 就可以吧
Linux下实时跟踪log4j日志文件的bash脚本 - 增强了tail -f的功能 -
java_is_new:
新手学习了,就是不明白为一个网卡配多个ip有什么用
我使用过的Linux命令之ifconfig - 网络配置命令
Bash字符串处理(与Java对照) - 25.字符串分割(成数组)
In Java
String.split
String[] split(String regex)
根据给定的正则表达式的匹配来拆分此字符串。
String[] split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。
In Bash
简单介绍一下Bash中的数组的定义和使用方法
在Bash中,每个变量都可以作为一维数组使用,并且Bash也只支持一维数组。
$VAR等同于${VAR[0]}
还有一种多此一举的声明数组的方法:declare -a VAR
数组数据的设置方式有:
VAR=(v1 v2 v3)
VAR=([0]=v0 [1]=v1 [2]=v2)
VAR[0]=v0
引用数组元素的方式:
$VAR ${VAR} ${VAR[0]} 第0个元素
${VAR[n]} 第n个元素(n从0开始计算)
引用整个数组:
${VAR[*]} ${VAR[*]} 这两种方式等同,会把数组展开。
"${VAR[*]}" 表示把数组拼接在一起的整个字符串,如果作为参数传递,会把整个字符串作为一个参数。
"${VAR[@]}" 如果作为参数传递,表示把数组中每个元素作为一个参数,数组有多少个元素,就会展开成多少个参数。
计算数组元素长度:
${#VAR[*]} ${#VAR[@]} 不是 ${#VAR},因为它等同于 ${#VAR[0]}
注意:数组元素长度 != 最大索引 + 1,因为Bash的数组是稀疏数组(Sparse array)。
[root@web ~]# a[1]=1
[root@web ~]# a[1000]=1000
[root@web ~]# declare -p a
declare -a a='([1]="1" [1000]="1000")'
[root@web ~]# echo "$a"
[root@web ~]# echo "$a[1]"
[1]
[root@web ~]# echo "${a[@]}"
1 1000
[root@web ~]# echo "${#a[@]}"
2
[root@web ~]#
遍历数组元素:(注意双引号)
for ELEM in "${ARRAY[@]}"
do
echo $ELEM
done
以空白作为分隔符来拆分字符串构造数组
ARR=($STR)
注意$STR不能加引号。
[root@jfht ~]# STR="Hello World"
[root@jfht ~]# ARR=($STR)
[root@jfht ~]# declare -p ARR
declare -a ARR='([0]="Hello" [1]="World")'
[root@jfht ~]#
用指定分隔符来拆分字符串构造数组
如果分隔符不是空白,而是别的,那么需要借助IFS变量。
default IFS (Internal Field Separator, which is space/tab/new line)
[root@jfht ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/apache/apache-ant-1.7.1/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@jfht ~]# IFS=: DIRS=($PATH)
[root@jfht ~]# declare -p DIRS
declare -a DIRS='([0]="/usr/kerberos/sbin" [1]="/usr/kerberos/bin"
[2]="/usr/apache/apache-ant-1.7.1/bin" [3]="/usr/local/sbin"
[4]="/usr/local/bin" [5]="/sbin" [6]="/bin" [7]="/usr/sbin"
[8]="/usr/bin" [9]="/root/bin")'
[root@jfht ~]#
但是下面的方式是不行的。
[root@jfht ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/apache/apache-ant-1.7.1/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@jfht ~]# IFS=: declare -a DIRS=($PATH)
[root@jfht ~]# declare -p DIRS
declare -a
DIRS='([0]="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/apache/apache-ant-1.7.1/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin")'
[root@jfht ~]#
使用read -a来拆分字符串构造数组
All work and no play makes Jack a dull boy.
只会用功不玩耍,聪明孩子也变傻。
[root@jfht ~]# PROVERB="All work and no play makes Jack a dull boy."
[root@jfht ~]# read -a WORDS <<<$PROVERB
[root@jfht ~]# echo "$WORDS"
All
[root@jfht ~]# echo "${#WORDS}"
3
[root@jfht ~]# echo "${WORDS[*]}"
All work and no play makes Jack a dull boy.
[root@jfht ~]# echo "${WORDS[@]}"
All work and no play makes Jack a dull boy.
[root@jfht ~]# echo "${#WORDS[*]}"
10
[root@jfht ~]# echo "${#WORDS[@]}"
10
前面的例子中要分割的字符串是以空格分割的,现在举一个以:分割的例子。
[root@jfht ~]# echo $IFS
[root@jfht ~]# IFS=: read -r -a DIRS <<<"$PATH"
[root@jfht ~]# echo $IFS
[root@jfht ~]# declare -p DIRS
declare -a DIRS='([0]="/usr/kerberos/sbin" [1]="/usr/kerberos/bin"
[2]="/usr/apache/apache-ant-1.7.1/bin" [3]="/usr/local/sbin"
[4]="/usr/local/bin" [5]="/sbin" [6]="/bin" [7]="/usr/sbin"
[8]="/usr/bin" [9]="/root/bin")'
[root@jfht ~]#
下面的例子是将当前工作目录以/进行分割。
[root@jfht ctmw]# echo $PWD
/root/work191/ct08/src/ctmw
[root@jfht ctmw]# IFS=/ read -r -a PARTS <<<$PWD
[root@jfht ctmw]# declare -p PARTS
declare -a PARTS='([0]=" root work191 ct08 src ctmw")'
[root@jfht ctmw]#
[root@jfht ctmw]# IFS=/ read -r -a PARTS <<<"$PWD"
[root@jfht ctmw]# declare -p PARTS
declare -a PARTS='([0]="" [1]="root" [2]="work191" [3]="ct08" [4]="src" [5]="ctmw")'
[root@jfht ctmw]#
使用cut命令分隔字符串
echo "$STR" | cut -f $N
以TAB分隔,打印第N个子串值,N从1开始计数。
echo "$STR" | cut -d "$DELIM" -d $N
以指定DELIM分隔,打印第N个子串值,N从1开始计数。
其中,-d部分也可以是$N1,$N2,$N3的形式,即输出多个子串。
A good beginning is half done.
良好的开端是成功的一半。
[root@jfht ~]# STR="A good beginning is half done."
[root@jfht ~]# echo $STR | cut -d ' ' -f 2
good
[root@jfht ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/apache/apache-ant-1.7.1/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@jfht ~]# echo $PATH | cut -d ':' -f 3
/usr/apache/apache-ant-1.7.1/bin
[root@jfht ~]# echo $PATH | cut -d ':' -f 3,5
/usr/apache/apache-ant-1.7.1/bin:/usr/local/bin
使用awk命令分隔字符串
echo "$STR" | awk '{print $1}'
echo "$STR" | awk '{print $2}'
注意:awk后面的参数用单引号,不能用双引号。
[root@jfht ~]# STR="A good beginning is half done."
[root@jfht ~]# echo "$STR" | awk '{print $1}'
A
[root@jfht ~]# echo "$STR" | awk '{print $2}'
good
[root@jfht ~]# echo "$STR" | awk '{print $5,$6}'
half done.
本文链接:http://codingstandards.iteye.com/blog/1164910 (转载请注明出处)
返回目录:Java程序员的Bash实用指南系列之字符串处理(目录)
上节内容:Bash字符串处理(与Java对照) - 24.文件路径字符串的处理
下节内容:Bash字符串处理(与Java对照) - 26.根据位置和长度截取子串
发表评论
-
Bash字符串处理(与Java对照) - 22.判断字符串是否数字串
2011-10-25 09:25 5421Bash字符串处理(与Java对照) - 22.判断字符串是否 ... -
Bash字符串处理(与Java对照) - 21.字符串正则匹配
2011-10-24 09:07 10998Bash字符串处理(与Java对照) - 21.字符串正则匹配 ... -
Bash字符串处理(与Java对照) - 20.查找子串的位置
2011-10-19 09:14 6727Bash字符串处理(与Java对照) - 20.查找子串的位置 ... -
Bash字符串处理(与Java对照) - 19.查找字符的位置
2011-10-18 09:06 5895Bash字符串处理(与Java对照) - 19.查找字符的位置 ... -
Bash字符串处理(与Java对照) - 18.格式化字符串
2011-10-17 09:18 4919Bash字符串处理(与Java对照) - 18.格式化字符串 ... -
Bash字符串处理(与Java对照) - 17.判断是否以另外的字符串结尾
2011-10-09 08:58 6921Bash字符串处理(与Java对照) - 17.判断是否以另外 ... -
Bash字符串处理(与Java对照) - 16.判断是否以另外的字符串开头
2011-10-08 09:17 8295Bash字符串处理(与Java对照) - 16.判断是否以另外 ... -
Bash字符串处理(与Java对照) - 15.计算子串出现的次数
2011-09-28 09:37 3361Bash字符串处理(与Java对照) - 15.计算子串出现的 ... -
Bash字符串处理(与Java对照) - 14.判断是否包含另外的字符串(多达6种方法)
2011-09-27 13:22 8264Bash字符串处理(与Java对照) - 14.判断是否包含另 ... -
Bash字符串处理(与Java对照) - 13.字符串数组连接(以指定分隔符合并)
2011-09-26 09:19 5111Bash字符串处理(与Java对照) - 13.字符串数组连接 ... -
Bash字符串处理(与Java对照) - 12.字符串连接
2011-09-23 09:08 6305Bash字符串处理(与Java对照) - 12.字符串连接 ... -
Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较)
2011-09-21 09:31 5643Bash字符串处理(与Java对照) - 11.比较两个字符串 ... -
Bash字符串处理(与Java对照) - 10.判断两个字符串是否相等(不等)
2011-09-20 09:16 6834Bash字符串处理(与Java对照) - 10.判断两个字符串 ... -
Bash字符串处理(与Java对照) - 9.获取字符串指定位置的字符、遍历字符串中的字符
2011-09-19 09:13 3684Bash字符串处理(与Java对照) - 9.获取字符串指定位 ... -
Bash字符串处理(与Java对照) - 8.计算字符串长度
2011-09-16 09:20 5583Bash字符串处理(与Java对照) - 8.计算字符串长度 ... -
Bash字符串处理(与Java对照) - 7.字符串与默认值
2011-09-15 09:20 3888Bash字符串处理(与Java对照) - 7.字符串与默认值 ... -
Bash字符串处理(与Java对照) - 6.判断字符串是否为空(不为空)
2011-09-14 09:20 7150Bash字符串处理(与Java对照) - 6.判断字符串是否为 ... -
Bash字符串处理(与Java对照) - 5.字符串输入(读取字符串)
2011-09-13 09:28 3878Bash字符串处理(与Java对照) - 5.字符串输入(读取 ... -
Bash字符串处理(与Java对照) - 4.字符串输出
2011-09-08 09:30 3692Bash字符串处理(与Java对照) - 4.字符串输出 I ... -
Bash字符串处理(与Java对照) - 3.给(字符串)变量赋值
2011-09-07 09:29 6830Bash字符串处理(与Java ...
相关推荐
bash-3.1-MSYS-1.0.11-snapshot.tar.bz2 ffmpeg 安装用包!
在centos6或rhel6 操作系统安装bash-completion-2.1-6.el7.noarch.rpm后,重启即生效
离线安装包,测试可用
libguestfs-bash-completion-1.40.2-28.module_el8.5.0+821+97472045.noarch(1).rpm官方离线安装包,亲测可用
-bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...
openjdk-18.0.1.1(openjdk-18.0.1.1_linux-x64_bin.tar.gz)适用于Linux x64 系统:
git-bash.exe
修改redhat 7 bash远程执行任意代码漏洞
bash-4.1.2-9.el6_2.i686.rpm是centos工具类。
在Linux下使用sqlplus或者rman时,经常需要调用上次或之前运行过的命令 下载包地址: ... 地址2: ... 1. rpm -ivh rlwrap-0.42-1.el7.x86_64.rpm ...2. 检查包是否安装上 rpm -qa rlwrap ...4. 生效: source .bash_profile
redhat bash漏洞补丁包含文件:bash-4.1.2-15.el6_5.2.i686.rpmbash-4.1.2-15.el6_5.2.x86_64.rpmbash-3.0-27.el4.i386.rpmbash-3.0-27.el4.x86_64.rpmbash-3.2-33.el5_11.4.i386.r... redhat bash漏洞补丁 包含文件...
修复redhat6 bash远程执行任意代码漏洞CVE-2014-6271
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
命令补全 Centos6/7或Rhel6/7 安装 bash-completion-2.1-6.el7.noarch.rpm 后重启即生效
网上有很多bash补丁下载,但都是x86_64架构的,针对i686的下载很少,bash-4.1.2-15.el6_5.2.src.rpm 也很难下载,希望上传的这个bash-4.1.2-15.el6_5.2.i686.rpm对你有用。
离线安装包,亲测可用
#tar zxvf bash-4.4.tar.gz #cd bash-4.4 #./configure (如果centos7编译失败,请先安装#yum install gcc) #make #make install 添加环境变量 #echo‘ export PATH=/usr/local/bin:$PATH‘ >>/etc/profile #source...
执行如下命令查看设备是否存在bash安全漏洞。 #env -i X='() { (a)=>\\' bash -c '/dev/stdout echo vulnerable' 2>/dev/null 判定依据 如果以上命令的输出为以下内容则不合规: vulnerable
.git-completion.bash