Bash 4.4 中新增了一种 ${...} 语法,长这样:${parameter@operator}。根据不同的 operator,它展开后的值可能是 parameter 这个参数的值经过某种转换后的值,又可能是关于 parameter 参数自身的某种信息。这句话太抽象了,还是看下面的详细解释吧。

operator 一共有 5 种值,分别是 Q、E、P、A、a,都是单个的字母。

Q

quote 的缩写,这个 operator 的功能是把 parameter 的值加上合适的引号,从而转换成在脚本中可重用的(reusable)字符串形式:

$ foo=1

$ echo ${foo@Q}

'1' # 原本 foo 的值只有 1 这一个字符,转换后的值有三个字符 “'1'”

$ echo ${IFS@Q}

$' \t\n' # 因为 IFS 中有不可打印字符,所以转换后的值会自动使用 ANSI 转义形式的引号 $'...',并且里面的字符也会使用反斜杠转义的形式

E

escape 的缩写,这个 operator 的功能是把 parameter 的值中包含的转义序列解义(unescape),就仿佛是把 parameter 的值放在了 $'...' 中间一样:

$ foo='\u4e00'

$ echo $foo

\u4e00 # foo 的值包含 6 个 字符,刚好是一个转义序列

$ echo ${foo@E}

一 # 识别并转换 foo 的值中的转义序列,就像是执行了 echo $'\u4e00' 一样

P

prompt 的缩写,这个 operator 的功能是把 parameter 的值按照提示符变量(PS1...)的转义规则解义,就像 Bash 解义 PS1... 一样:

$ foo='提示符-\s-\v\$'

$ echo ${foo@P}

提示符-bash-4.4$ # \s 变成了 bash,\v 变成了 4.4,\$ 变成 $

A

assignment 的缩写,这个 operator 的功能是把 parameter 的值和它的名字一起,转换成可重用的赋值语句的形式,如果 parameter 带有任何的属性,会进一步转换成用 declare 命令声明变量(带对应属性)的形式:

$ foo=1

$ echo ${foo@A}

foo='1' # 最普通的赋值语句

$ readonly foo # 给 foo 加上 r 属性

$ echo ${foo@A}

declare -r foo='1' # declare 命令的形式

$ export foo # 给 foo 加上 x 属性

$ echo ${foo@A}

declare -rx foo='1' # 变成了两个属性 rx

a

attribute 的缩写,这个 operator 的功能是获取 parameter 的所有属性:

$ declare -irtu foo=1

$ echo ${foo@a}

irtu

数组

若 parameter 是个带有 [*] 或者 [@] 下标的数组,那么如果 operator 是 QEPa 中的一个,则返回的值是一个列表,列表中的值分别对应原数组中的每个元素;如果 operator 是 A,则返回一个用 declare 声明数组的形式的字符串:

$ readonly foo=(1 "$IFS" bar)

$ echo ${foo[@]@Q}

'1' $' \t\n' 'bar'

$ echo  ${foo[@]@A}

declare -ar foo=([0]="1" [1]=$' \t\n' [2]="bar")

Bash 4.4 中新增的 ${parameter@operator} 语法的更多相关文章

  1. Bash 脚本编程语言中的美学与哲学

    我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨 Bash 脚本语言中的美学与哲学. 这不是一篇 Bash 脚本编程的教程,但是却能让人更加深入地了解 Bash ...

  2. Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)

    阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 ...

  3. Linux 桌面玩家指南:06. 优雅地使用命令行及 Bash 脚本编程语言中的美学与哲学

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  4. 在 .NET 4.0 中使用 .NET 4.5 中新增的特性(CallerMemberNameAttribute/CallerFilePathAttribute/CallerLineNumberAttribute)

    介绍 标题中所说的三个特性 CallerMemberNameAttribute / CallerFilePathAttribute / CallerLineNumberAttribute 我们统称为调 ...

  5. Linux Bash脚本编程语言中的美学与哲学

    我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨Bash脚本语言中的美学与哲学. 这不是一篇Bash脚本编程的教程,但是却能让人更加深入地了解Bash脚本编程,更 ...

  6. shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)

    shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected) blogdaren 2015-02-26  抢沙发 14916人 ...

  7. html5中新增的form表单属性

    html5中新增两个表单属性,分别autocomplete和novalidate属性 1.autocomplete属性 该属性用于控制自动完成功能的开启和关闭.可以设置表单或者input元素,有两个属 ...

  8. [转]在NopCommerce中新增一个Domain Model的步骤

    本文转自:http://www.cnblogs.com/aneasystone/archive/2012/08/27/2659183.html 在NopCommerce中新增一个Domain Mode ...

  9. S5中新增的Array方法详细说明

      ES5中新增的Array方法详细说明 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wor ...

随机推荐

  1. 一个新人眼中的O2O

    O2O是近几年来电商行业颇为受宠的方向.就其所代表的意思,线上线下,大部分人都耳熟能详.然而对于这样一个行业,很多人都有附势之嫌.最终是人力物力出尽,效果不佳.一直以来,喜欢互联网,梦想创业,梦想在互 ...

  2. Mac安装Windows 10的简明教程

    每次在Mac上安装Windows都是一件非常痛苦的事情,曾经为了装Win8把整台Mac的硬盘数据都弄丢了,最后通过龟速系统恢复模式恢复了MacOSX(50M电信光纤下载了3天才把系统下载完),相信和我 ...

  3. [Django]Django1.8修改MySQL已存在表的问题?

    前言:django1.8版本出现这种问题,关于标题不好命令,直接看正文问题描述! 问题描述: 在已经生成了models.py中表的情况下,更改了modes.py中的表,但是syncdb不起作用报错.于 ...

  4. 【原】移动web页面支持弹性滚动的3个方案

    有段时间一直折腾移动端页面弹性滚动的各种问题,做了点研究,今天做个小分享~ 传统 pc 端中,子容器高度超出父容器高度,通常使用 overflow:auto 可出现滚动条拖动显示溢出的内容,而移动we ...

  5. Fast RCNN 训练自己的数据集(3训练和检测)

    转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ https://github.com/YihangLou/fas ...

  6. 第1章 重构,第一个案例(2):分解并重组statement函数

    2. 分解并重组statement (1)提炼switch语句到独立函数(amountFor)和注意事项. ①先找出函数内的局部变量和参数:each和thisAmount,前者在switch语句内未被 ...

  7. python使用you-get模块下载视频

    pip install you-get # 安装先 怎么用    进入命令行: you-get url 暂停下载:ctrl + c ,继续下载重复  you-get url 官网地址:https:// ...

  8. linux系统下的权限知识梳理

    下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明.linux中除了常见的读(r).写(w).执行(x)权限以外,还有其他的一些特殊或隐藏权限,熟练掌握这些权限知识的使用, ...

  9. ipad

    1. ipad pro 与 ipad air2 时间已经是2016.12.9, 苹果还没有推出新的ipad产品,有些纠结于哪款更适合自己,总结下产品不易获取的核心配置信息 ipad air2 ram ...

  10. asp.net mvc HandleErrorAttribute 异常错误处理 无效!

    系统未知bug,代码没有深究. 现象:filters.Add(new HandleErrorAttribute()); 使用了全局的异常处理过滤. HandleErrorAttribute 核心代码: ...