是否可以在 bash (posix) 中扩展存储为另一个变量的变量?

问题描述 投票:0回答:1

出于教育目的,我正在尝试编写一个小脚本来测试 bash 中带引号和不带引号的特殊参数之间的差异。特别是$、“$”、$@和“$@”

粗略地说,当特殊参数的名称存储在数组中时,我试图在 for 循环中获取特殊参数的名称和值

script

#!/bin/bash

IFS=','
args='$*,"$*"'
for a in ${args} 
do
  echo "$a"         # Outputs $* or "$*"
  echo $(echo "$a") # Outputs the same
                    # but desired output is the value of variable stored inside $a
  echo "${!a}"      # Doesn't work. Indirect expansion?
done

如果我将

args
变量的值放在单引号 (
args='$*,"$*"'
) 中,我将获得 for 循环内的参数名称。 如果我将
args
变量的值放在双引号 (
args="$*,\"$*\""
) 中,我将获得循环内特殊参数的值。 但我两者都需要。还有名称和“值的值”。

我尝试过间接扩展,但我不确定我是否正确使用它

例如当我运行带有多个参数的脚本时:

./script arg1 arg2
我期望这个输出:

$*          <-------value of $args
arg1        <-------values of 'value of $args', i.e echo $*
arg2
"$*"        <-------the second iteration
arg1 arg2   <--values of 'value of $args', i.e. echo "$*"

Bash 解决方案是可以接受的,但如果是 Posix 解决方案那就太好了

linux bash for-loop variable-assignment
1个回答
0
投票

要使用间接(参考),请检查:

$ foo=bar
$ declare -n qux=foo
$ echo $qux
bar
© www.soinside.com 2019 - 2024. All rights reserved.