首页 > 解决方案 > shell脚本中的动态变量赋值

问题描述

我对 shell 脚本非常陌生,刚刚在 shell 中得到了下面提到的变量导出:

export VAR_FILE=${*: -1}

谁能帮助我理解这一点,因为我无法理解这一点

标签: bashshell

解决方案


好的,让我们拿起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 变量将被导出到子进程。


推荐阅读