bash - shell脚本中的动态变量赋值
问题描述
我对 shell 脚本非常陌生,刚刚在 shell 中得到了下面提到的变量导出:
export VAR_FILE=${*: -1}
谁能帮助我理解这一点,因为我无法理解这一点
解决方案
好的,让我们拿起bash 手册,然后开始:
export variable[=value]
- “标记每个名称以传递给环境中的子进程。”。这意味着,如果您从该 shell 运行另一个进程(即带有命令的子 shell:),sh -c 'echo $variable'
它将共享变量值。
$*
- "($*) 扩展到位置参数,从一个开始。"。例如:sh -c 'echo $1' -- 1
,$1
将扩展为“第一个位置参数”。因此$*
扩展到所有位置参数。
${parameter:offset:length}
- 这被称为“子字符串扩展”。它扩展到从偏移量开始的字符。如果参数是*
或@
它扩展为位置参数,即:${*:2:1}
等于$2
。您也可以给出负偏移量,然后从后面开始计数。如果省略:length
部分,则假定长度是无限的(到字符串的末尾,到最后一个位置参数)。
${*:-1}
- 这不会像您期望的那样工作,原因会${parameter:-word}
扩展到1
如果$*
为空或未设置。这意味着我们需要一个空格,:-
因此 bash 不会将子字符串扩展与:-
.
${*: -1}
- 这将为您提供最后一个位置参数。IE。sh -c 'echo ${*: -1}' -- 1 2 3
将输出 3。
export VAR_FILE=${*: -1}
- 获取最后一个位置参数,将其分配给 VAR_FILE 变量并设置该 VAR_FILE 变量将被导出到子进程。
推荐阅读
- python - 在缩进中赋值给变量
- python-3.x - 如何将sklearn线性回归系数和截距转换为3位小数?
- testing - 如何在 Cucumber-QAF 设置中跳过通过的测试用例
- reactjs - 更改的开玩笑输入未触发/模拟
- reactjs - 如何使用反应样式组件添加自定义 CSS
- gradle - gradle 中 JUnit 5 和 JUnit 4 的不同配置
- reactjs - 你可以将 scss 文件作为道具传递给另一个反应组件来使用吗?
- c# - WCF XML反序列化不填充数组
- r - 使用 dplyr 根据模式过滤数据帧并重新排序
- android - 无法使用 Google 应用签名测试应用内交易