bash的一些小技巧
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的一些小技巧的更多相关文章
- Linux的95个小技巧
Linux的95个小技巧 by WEB全栈工程师 on 2012 年 03 月 27 日 这里总结了Linux使用中的一些小技巧 1.实现RedHat非正常关机的自动磁盘修复 先登录到服务器,然后在/ ...
- MySQL大表DROP删除小技巧(转)
在日常工作中,经常会遇到历史大表从主库上迁移到备份机,以便腾出主库空间,那么如果你直接drop table 后,可能会引起数据库抖动,连接数升高等问题,从而影响业务. 那么用一个小技巧,即可轻松平滑的 ...
- Linux查看History记录加时间戳小技巧
Linux查看History记录加时间戳小技巧 熟悉bash的都一定知道使用history可以输出你曾经输入过的历史命令,例如[root@servyou_web ~]# history | more ...
- Linux及FL2440使用过程遇到的各种问题和小技巧
原文链接:http://www.cnblogs.com/NickQ/p/8900474.html ## Linux及FL2440使用过程遇到的各种问题和小技巧 关于移植linux根文件系统中的问题 在 ...
- Linux下wget下载软件小技巧以及安装jdk、tomcat与ftp服务器
一.ftp的安装 装个ftp搞了一下午,感觉以前没那么麻烦的呀,结果到晚上才发现是实验室网的问题,换连手机的热点马上可以了,真是尴尬,把基本安装步骤记录一下: 1.检查安装vsftpd软件 使用如下命 ...
- python小技巧 小知识
python小技巧 小知识 python系统变量(修改调用shell命令路径)或用户空间说明 20150418 python调用系统命令,报找不到.怎么办? 类似执行shell的: [ -f /etc ...
- docker的小技巧记录(如果使用了更多会继续添加)
docker小技巧 复制本地sql脚本到docker容器mysql中进行使用 # 找到容器 docker ps # 复制文件 cp ./xxx.sql container-id:/tmp/ # 进入容 ...
- BASH的保护性编程技巧
BASH的保护性编程技巧 shell常用逻辑判断 -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d file 若文件存在且是一个目 ...
- grep的用法,小技巧,模板中含有\t时:grep -P "^\t" file
linux中grep和find的用法区别 本文章详细的介绍了关于在linux中的grep和find两个命令的用法介绍,以及后面总结了它们两年用法区别哦. 先我们来介绍一下关于grep用法和一些小注意事 ...
随机推荐
- iOS开发——高级技术&社交服务
社交服务 Social 现 在很多应用都内置“社交分享”功能,可以将看到的新闻.博客.广告等内容分享到微博.微信.QQ.空间等,其实从iOS6.0开始苹果官方就内置了 Social.framework ...
- J2EE Web开发入门—通过action是以传统方式返回JSON数据
关键字:maven.m2eclipse.JSON.Struts2.Log4j2.tomcat.jdk7.Config Browser Plugin Created by Bob 20131031 l ...
- C++ Data Member内存布局
如果一个类只定义了类名,没定义任何方法和字段,如class A{};那么class A的每个实例占用1个字节的内存,编译器会会在这个其实例中安插一个char,以保证每个A实例在内存中有唯一的地址,如A ...
- 初学Linux
一直觉得Linux敲命令很蛋疼,今天开始学习一下吧,主要以练习(想到啥就查啥)命令和练习在Linux中编程(Python)为主吧. 不记得什么时候安装的Ubuntu 12.04.3 LTS虚拟机,连密 ...
- ubuntu 16.04 vnc server
安装方法 https://help.ubuntu.com/community/VNC/Servers#vino 系统默认自带的,通过搜索Remote Desktop来找到它 配置好之后,设定一下密码 ...
- MongoDB副本集配置系列九:MongoDB 常见问题
What is a namespace in MongoDB? If you remove a document, does MongoDB remove it from disk? When doe ...
- C#版Windows服务安装卸载小工具-附源码
前言 在我们的工作中,经常遇到Windows服务的安装和卸载,在之前公司也普写过一个WinForm程序选择安装路径,这次再来个小巧灵活的控制台程序,不用再选择,只需放到需要安装服务的目录中运行就可以实 ...
- WinDbg使用介绍
Windbg工作空间 WinDbg使用工作空间来描述和存储调试项目的属性.参数及调试器设置等信息.工作空间与vc中的项目文件很相似.WinDbg定义了两种工作空间,一种为默认工作空间,另一种为命名的工 ...
- java利用透明的图片轮廓抠图
需要处理的图片: 1.png(空白区域为透明) 2.png 处理后的结果图片:result.png 代码如下: import java.awt.Graphics2D; import java.awt. ...
- 【规范】javascript 变量命名规则
javascript 有三大经典的变量命名法:匈牙利命名法,驼峰式命名法和帕斯卡命名法.今天主要介绍下这三种命名方式. 匈牙利命名法 语法 变量名 = 类型 + 对象描述 类型指变量的类型 对象描述指 ...