1、从输入读入变量

eg:read -ep "input yes or no: " flag

用e选项表示编辑,可以使用backspace删除

2、数组

a、索引数组

declare -a arr=(var1 var2 var3) 用空格分割,如果直接访问变量$arr,

则获取的是数组的第一个元素,访问要是用${arr[idx]}来。

也可声明数组后再赋值,即declare -a arr;arr[0]=var1;arr[1]=var2;arr[3]=var3

如下:

获取所有数组元素把索引换为@,获取数组长度则要在获取所有数组的变量前加#

如下:

b、关联数组

关联数组把-a,换为-A即可,其它和索引数组类似,但是直接访问变量将没有输出。

这也好理解,因为没有第一个元素的概念了,而且可以看到获取所有key对应的值时,也是没有顺序的。

3、字符串转变量

使用eval命令求值

eval可以用返回值存储变量,这就有可以和关联数组,实现比较好玩的东西了。

4、多维数组

declare -A map1=(
[key1]=a1
[key2]=b1
) declare -A map2=(
[key1]=a2
[key2]=b2
) declare -a arr=(map1 map2)

如果这时候想获取数组arr里的第一个元素的key1值,估计大家会想到

tmp=${arr[0]};echo ${tmp[key1]}

然而输出的是map1,因为map1只是个字符串,并不是指向$map1变量。

于是可能会想到,这么修改,declare -a arr=($map1 $map2),可是结果是什么也没输出。

后来我找了一些资料,也没找到解决的方法。或许是bash不支持。

让我们用eval来试试。

eval tmp="\${map1[key1]}";echo $tmp;

\$表示转义,即不要当变量解析,可以看到成功输出a1。

那么我们把map1构造出来,${arr[0]}即map1,完整如下:

eval tmp="\${${arr[0]}[key1]}";echo $tmp

那么我们就可以在循环里做些事情了:

declare -A map1=(
[key1]=a1
[key2]=b1
) declare -A map2=(
[key1]=a2
[key2]=b2
) declare -a arr=(map1 map2) for var in ${arr[@]}; do
eval tmp="\${$var[key1]}"
echo $tmp done

这里的$var即数组arr里的元素,可以看到成功的输出了预期值:

bash的一些小技巧的更多相关文章

  1. Linux的95个小技巧

    Linux的95个小技巧 by WEB全栈工程师 on 2012 年 03 月 27 日 这里总结了Linux使用中的一些小技巧 1.实现RedHat非正常关机的自动磁盘修复 先登录到服务器,然后在/ ...

  2. MySQL大表DROP删除小技巧(转)

    在日常工作中,经常会遇到历史大表从主库上迁移到备份机,以便腾出主库空间,那么如果你直接drop table 后,可能会引起数据库抖动,连接数升高等问题,从而影响业务. 那么用一个小技巧,即可轻松平滑的 ...

  3. Linux查看History记录加时间戳小技巧

    Linux查看History记录加时间戳小技巧 熟悉bash的都一定知道使用history可以输出你曾经输入过的历史命令,例如[root@servyou_web ~]# history | more ...

  4. Linux及FL2440使用过程遇到的各种问题和小技巧

    原文链接:http://www.cnblogs.com/NickQ/p/8900474.html ## Linux及FL2440使用过程遇到的各种问题和小技巧 关于移植linux根文件系统中的问题 在 ...

  5. Linux下wget下载软件小技巧以及安装jdk、tomcat与ftp服务器

    一.ftp的安装 装个ftp搞了一下午,感觉以前没那么麻烦的呀,结果到晚上才发现是实验室网的问题,换连手机的热点马上可以了,真是尴尬,把基本安装步骤记录一下: 1.检查安装vsftpd软件 使用如下命 ...

  6. python小技巧 小知识

    python小技巧 小知识 python系统变量(修改调用shell命令路径)或用户空间说明 20150418 python调用系统命令,报找不到.怎么办? 类似执行shell的: [ -f /etc ...

  7. docker的小技巧记录(如果使用了更多会继续添加)

    docker小技巧 复制本地sql脚本到docker容器mysql中进行使用 # 找到容器 docker ps # 复制文件 cp ./xxx.sql container-id:/tmp/ # 进入容 ...

  8. BASH的保护性编程技巧

    BASH的保护性编程技巧   shell常用逻辑判断 -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d file 若文件存在且是一个目 ...

  9. grep的用法,小技巧,模板中含有\t时:grep -P "^\t" file

    linux中grep和find的用法区别 本文章详细的介绍了关于在linux中的grep和find两个命令的用法介绍,以及后面总结了它们两年用法区别哦. 先我们来介绍一下关于grep用法和一些小注意事 ...

随机推荐

  1. Redis 环境搭建与使用(C#)

    Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis是一个key-value存储系统.和M ...

  2. Observer模式

    拉模式. Observer实现了一种间接关系.可以向各种对象注册观察者.可以有效地管理依赖关系. 拉模式实现简单,且Subject和Observer可以成为类库中的可重用元素. 当被观察对象比较复杂, ...

  3. 开发ERP软件应该遵守的22条规则

    总结一下做管理软件,有哪些项是经过检验的条款,必须遵守的. 界面篇 1  要保存用户的偏号(profile/favourite). ASP.NET 2.0引入此功能,当用户修改默认的控件的属性时,框架 ...

  4. Hadoop-2.6.0 + Zookeeper-3.4.6 + HBase-0.98.9-hadoop2环境搭建示例

    1    基本信息 1.1     软件信息 hadoop-2.6.0 zookeeper-3.4.6 hbase-0.98.9-hadoop2 (以下示例中使用的操作系统是Centos 6.5,请将 ...

  5. Android——BitMap(位图)相关知识总结贴

    Android中文API(136) —— Bitmap http://www.apkbus.com/android-54644-1-1.html Android 4.0 r1 API—Bitmap(S ...

  6. Node-restify 简介

    restify 是Node.js的模块.虽然restify的API或多或少的参考了express,但restify不是一个MVC框架,它是一套为了能够正确构建REST风格API而诞生的框架. http ...

  7. ReactiveCocoa与Functional Reactive Programming

    转自 http://blog.leezhong.com/ios/2013/06/19/frp-reactivecocoa.html Functional Reactive Programming(以下 ...

  8. 【译】在 Chrome 开发者工具中调试 node.js

    原文链接 : Debugging Node.js in Chrome DevTools 原文作者 : MATT DESLAURIERS 译文出自 : 掘金翻译计划 译文链接 : https://git ...

  9. C# WinForm 技巧十: 开发工具

    一.摘要   为了开发效率就应该为这个框架开发一个配套工具.来生成固定格式的代码.工具界面如下:   二.数据库整理篇   添加表主键 修改表说明 修改表字段说明 生成数据库文档 导出数据库里相同的字 ...

  10. Mac OSX系统下SVN客户端SCPlugin问题

    装上SCPlugin后,Checkout老是出现这种错误: Server certificate verification failed: certificate issued for a diffe ...