很多类似的问题,但没有找到一个在名称中使用变量的方式:
#!/bin/bash
# $1 should be 'dev' or 'stg'
dev_path="/path/to/123"
stg_path="/path/to/xyz"
# Use $1 as input to determine which path variable to 'execute'
${!\$1'/morepath'}
Run Code Online (Sandbox Code Playgroud)
使用$ 1,我希望能够引用$ dev_path或$ stg_path($ 1 =='dev'或$ 1 =='stg')并且能够引用$ 1_path的值,该值为'/ path/to/123'或'/ path/to/xyz'
所以结果要么是:
'/path/to/123/morepath' or '/path/to/xyz/morepath'
Run Code Online (Sandbox Code Playgroud)
基于$ 1为'dev'或'stg'.
我尝试了各种迭代!和\ $在其他帖子的各个地方,但没有运气
有关shell参数扩展的信息,请参阅Bash手册部分:
如果参数的第一个字符是感叹号(!),则引入一个变量间接的级别.Bash使用从参数的其余部分形成的变量的值作为变量的名称; 然后展开此变量,并将该值用于替换的其余部分,而不是参数本身的值.这被称为
indirect expansion.对此的例外是以下的扩展${!prefix }和${!name[@]}描述.感叹号必须紧跟左支撑,以引入间接.[...]
由于您还希望_path在再次展开之前修改名称(通过后缀),因此您需要浏览另一个变量:
# $1 should be 'dev' or 'stg'
dev_path="/path/to/dev"
stg_path="/path/to/stg"
path=${1}_path # path is now either 'dev_path' or 'stg_path'
# Run either /path/to/dev or /path/to/stg
${!path}/bin/execute
Run Code Online (Sandbox Code Playgroud)
当然,如果两个dev和stg程序都在同一个目录中,那么就不需要这一切了,你可以直接扩展$1:
/path/to/$1/bin/execute
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
483 次 |
| 最近记录: |