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用法和一些小注意事 ...
随机推荐
- Redis 环境搭建与使用(C#)
Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis是一个key-value存储系统.和M ...
- Observer模式
拉模式. Observer实现了一种间接关系.可以向各种对象注册观察者.可以有效地管理依赖关系. 拉模式实现简单,且Subject和Observer可以成为类库中的可重用元素. 当被观察对象比较复杂, ...
- 开发ERP软件应该遵守的22条规则
总结一下做管理软件,有哪些项是经过检验的条款,必须遵守的. 界面篇 1 要保存用户的偏号(profile/favourite). ASP.NET 2.0引入此功能,当用户修改默认的控件的属性时,框架 ...
- 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,请将 ...
- Android——BitMap(位图)相关知识总结贴
Android中文API(136) —— Bitmap http://www.apkbus.com/android-54644-1-1.html Android 4.0 r1 API—Bitmap(S ...
- Node-restify 简介
restify 是Node.js的模块.虽然restify的API或多或少的参考了express,但restify不是一个MVC框架,它是一套为了能够正确构建REST风格API而诞生的框架. http ...
- ReactiveCocoa与Functional Reactive Programming
转自 http://blog.leezhong.com/ios/2013/06/19/frp-reactivecocoa.html Functional Reactive Programming(以下 ...
- 【译】在 Chrome 开发者工具中调试 node.js
原文链接 : Debugging Node.js in Chrome DevTools 原文作者 : MATT DESLAURIERS 译文出自 : 掘金翻译计划 译文链接 : https://git ...
- C# WinForm 技巧十: 开发工具
一.摘要 为了开发效率就应该为这个框架开发一个配套工具.来生成固定格式的代码.工具界面如下: 二.数据库整理篇 添加表主键 修改表说明 修改表字段说明 生成数据库文档 导出数据库里相同的字 ...
- Mac OSX系统下SVN客户端SCPlugin问题
装上SCPlugin后,Checkout老是出现这种错误: Server certificate verification failed: certificate issued for a diffe ...