bash变量扩展:$ {!1},$ {1#/}& export和typeset的用法,没有任何参数

时间:2014-02-17 23:39:57

标签: bash

我正在尝试通过bash脚本阅读https://github.com/wayneeseguin/rvm/blob/master/binscripts/rvm-installer上的rvm安装,但我很难理解以下几行。

line 22: export rvm_trace_flag rvm_debug_flag rvm_user_install_flag rvm_ignore_rvmrc rvm_prefix rvm_path

问:导出在没有任何参数的情况下做什么?

line 241: typeset _account _domain _pattern _repo _sources _values _version

问:排版在没有任何参数的情况下做什么?

line 242: _sources=(${!1})

问:不确定如何解释这种变量扩展。我已经检查过bash引用(http://www.gnu.org/software/bash/manual/bashref.html#Arrays),但仍然没有完全理解它。

line 510: branch=${1#/}
line 514: if [[ "${1%/}" -ne wayneeseguin ]] && [[ "${1%/}" -ne mpapis ]]

问:无法理解这两个变量扩展。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

没有任何参数的

export列出了所有导出的变量及其定义。请注意,您的行包含export的许多参数。

typeset已被declare取代。同样,没有参数,它列出了声明的所有内容,但是您的示例给出了命令的参数。

${!1}是一个变量间接。 $1包含将返回其值的变量的名称:

test=x
set -- test
echo ${!1}   # Returns x.

${1#/}从变量/的开头删除$1${1%/}将其从结尾删除。

有关详细信息,请参阅man bash中的参数扩展