在sh中将字符串替换为变量

时间:2018-09-04 17:45:30

标签: sh

是否有使用sh编写以下脚本的等效方法?我可以用bash来做,但是需要一个sh版本。

= f.input :notional, label: 'Notional', as: :string, input_html: {data: {mask_suffix: 'INR'}, class: 'form-control inputmask'}

输出:

#!/bin/bash
REPOS="one two"
export onefirst="one_first"
export onelast="one_last"
export twofirst="two_first"
export twolast="two_last"

echo $onefirst
for name in $REPOS
do
        temp=${name}first
        echo ${!temp}  <--- bad substitution if I use sh
done

2 个答案:

答案 0 :(得分:1)

chepner指出,您需要评估。比他的版本略干净:首先构造表达式,然后对其求值:

echo again $onefirst
for name in $REPOS; do
    temp="\$${name}first" # Construct expression
    eval "echo $temp"     # Evaluate expression
done

这使得在不添加反斜杠的情况下更容易存储评估结果:

echo again $onefirst
for name in $REPOS; do
    temp="\$${name}first"    # Construct expression
    res=`eval "echo $temp"`  # Evaluate and store
    echo "$res"
done

答案 1 :(得分:0)

在POSIX sh中完成此操作的唯一方法是使用eval,这意味着您必须非常确保自己知道{{1 }}是在使用它之前。

temp