Shell脚本中的间接参数替换 [英] Indirect parameter substitution in shell script

查看:209
本文介绍了Shell脚本中的间接参数替换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用shell脚本(HP-UX,FWIW下的POSIX shell)时遇到了问题.我有一个名为print_arg的函数,我在其中将参数的名称传递为$ 1.给定参数的名称,然后我要打印该参数的名称和值.但是,我不断收到错误消息.这是我要执行的操作的示例:

I'm having a problem with a shell script (POSIX shell under HP-UX, FWIW). I have a function called print_arg into which I'm passing the name of a parameter as $1. Given the name of the parameter, I then want to print the name and the value of that parameter. However, I keep getting an error. Here's an example of what I'm trying to do:

#!/usr/bin/sh

function print_arg
  {
  # $1 holds the name of the argument to be shown

  arg=$1

  # The following line errors off with
  #   ./test_print.sh[9]: argval=${"$arg"}: The specified substitution is not valid for this command.

  argval=${"$arg"}

  if [[ $argval != '' ]] ; then
    printf "ftp_func: $arg='$argval'\n"
  fi
  }

COMMAND="XYZ"

print_arg "COMMAND"

我已经尝试过以我能想到的方式重新编写违规行.我已经咨询了当地的神谕.我已经检查了在线"BASH脚本指南".然后我削起了ol'波浪状的刀,擦洗了祭坛,直到它闪闪发光,但是后来我发现我们当地的处女供应已经减少到了没什么"的程度.德拉特!

I've tried re-writing the offending line every way I can think of. I've consulted the local oracles. I've checked the online "BASH Scripting Guide". And I sharpened up the ol' wavy-bladed knife and scrubbed the altar until it gleamed, but then I discovered that our local supply of virgins has been cut down to, like, nothin'. Drat!

任何有关如何获取将其名称作为参数传递给函数的参数值的建议都将得到赞赏.

Any advice regarding how to get the value of a parameter whose name is passed into a function as a parameter will be received appreciatively.

推荐答案

尽管可以将直接间接用作

You could use eval, though using direct indirection as suggested by SiegeX is probably nicer if you can use bash.

#!/bin/sh

foo=bar
print_arg () {
    arg=$1
    eval argval=\"\$$arg\"
    echo "$argval"
}
print_arg foo

这篇关于Shell脚本中的间接参数替换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆