美文网首页
六、set的使用和数组

六、set的使用和数组

作者: 胖虎喜欢小红 | 来源:发表于2019-12-20 19:32 被阅读0次

set

set -u

当脚本中遇到未定义的变量时,默认是忽略。
有时候这并不是开发者想要的。
假如有未定义的变量,应该报错,并且终止脚本继续运行。
set -u 就可以办到
set -u //空字符串会继续执行

#!/usr/bin/bash
                                    //空字符串 set -u 会继续执行

echo $a
echo hello
[root@biudefor jiaoben]# bash set.sh 

hello
--------------------------- 我是一条分割线
#!/usr/bin/bash
set -u

echo $a
echo hello
[root@biudefor jiaoben]# bash set.sh 
set.sh: line 4: a: unbound variable

注意

set -u

a=`ls |grep 'asfdasdf'`
echo "|$a|"

# -u  只针对未定义的变量有效
# 这种情况,变量的值会是一个空字符串
# 所以脚本会继续执行

set -e

set -e 的作用就是:
在脚本执行中,有任何命令的返回值是非 0 的情况,则正在运行的脚本则会退出。

#!/usr/bin/bash

haha
echo hello
[root@biudefor jiaoben]# bash set.sh               //默认脚本中出现错误命令会继续执行
set.sh: line 3: haha: command not found
hello

--------------------------- 我是一条分割线

#!/usr/bin/bash
set -e

haha
echo hello
[root@biudefor jiaoben]# bash set.sh             //设置了set -e后,一报错就停止脚本运行
set.sh: line 4: haha: command not found

但是,对于一组含有管道的命令无效,比如:

#!/usr/bin/env bash
set -e
foo | echo "hello"    # 注意这里有管道符
echo  "程序会继续运行"

解决办法

set -o pipefail

需要和 set -e 配合使用。
如果设置,如果管道中的所有命令都成功退出,整条命令的返回值才是 0。否则返回非 0。
默认情况下禁用此选项

#!/usr/bin/bash
set -e
set -o pipefile

haha | grep hello
echo hello

[root@biudefor jiaoben]# bash set.sh 
set.sh: line 3: set: pipefile: invalid option name

数组

数组中的值: wukong  bajie  shaseng
值的索引号: 0    1     2

数组的索引只能是 整数

[root@biudefor jiaoben]# a=(1 2 3)             //()定义数组
[root@biudefor jiaoben]# echo ${a[2]}          //读取数组里的值 ${数组名[索引]}
3
[root@biudefor jiaoben]# echo ${a[*]}          //*和@ 列出所有的值
1 2 3

定义数组,并且其值从命令的结果中获取

# 把文件中的每一行作为数组中的一个值
[root@biudefor jiaoben]# line=(`cat /etc/passwd`)
[root@biudefor jiaoben]# a=($(cat /etc/passwd))

declare 声明关联数组

数组的索引可以是 普通字符串
声明关联数组使用 A 选项

declare -A  数组名称

[root@biudefor jiaoben]# declare -A d

2. 添加值

- 每次添加一个值,可以追加
数组名[索引]=值
[root@biudefor jiaoben]# d[1]=hello
[root@biudefor jiaoben]# echo ${d[1]}
hello
[root@biudefor jiaoben]# d[2]=hi
[root@biudefor jiaoben]# echo ${d[2]}
hi
[root@biudefor jiaoben]# echo ${d[*]}
hello hi
- 一次添加所以的值,不可以追加,每次都会覆盖上次的值

每个值之间使用空格隔开

[root@biudefor jiaoben]# d=(["3"]="dog" ["4"]="cat")
[root@biudefor jiaoben]# echo ${d[*]}
dog cat
[root@biudefor jiaoben]# echo ${d[3]}
dog

相关文章

  • es6数组去重方式

    Set:数据结构,类似数组,成员唯一...:(展开/剩余)运算符,展开数组和对象; ...使用 Set使用 结合两...

  • 六、set的使用和数组

    set set -u 当脚本中遇到未定义的变量时,默认是忽略。有时候这并不是开发者想要的。假如有未定义的变量,应该...

  • 使用Set进行数组去重

    关键词:ES6,set,Array.from(set),[...set],数组去重 使用Set进行数组去重方法,如...

  • Set

    Set Set 与数组类似, Set 集合中的元素不重复。 查找元素: 在数组中使用 indexOf() 或 in...

  • ES6学习笔记之数组

    使用set对象给数组去重[...new Set(array)] 字符串数组转数字数组['1', '2', '3']...

  • 2018-11-11 map

    使用set排重数组。 map的方法总结

  • ES6(一)

    一、Set结构 Set数据结构类似于数组,成员的值是唯一的,没有重复值。(数组去重!!) 向set加入值时,使用'...

  • 数组去重

    使用set进行简单去重 使用reduce进行复杂数组去重

  • Ruby基础

    1、数组和散列表 2.block的使用 3.类 继承 get方法 get更简单的方式 set方法 set更简单的方...

  • 小工具iterate学习(加快类数组的遍历速度)

    github地址 这是一个能在Map和Set使用数组方法(如:map()、filter(), reduce())。...

网友评论

      本文标题:六、set的使用和数组

      本文链接:https://www.haomeiwen.com/subject/anginctx.html