【问题标题】:How to access the content of a variable in argument?如何访问参数中变量的内容?
【发布时间】:2012-04-18 02:11:52
【问题描述】:

如何访问作为参数传递给 bash 脚本的变量的内容?

例如:sh myscript.sh PATH。现在我想修改PATH里面的字符串,但是一直访问失败!

有什么想法吗?

编辑:我需要能够访问任何变量,而不仅仅是PATH

【问题讨论】:

  • “PATH 内的字符串”是什么意思? PATH 是一个字符串。 $PATH 是一个不同的字符串。您是在询问字符串“PATH”还是名为 PATH 的变量?
  • 好吧,我想要$PATH 会产生的字符串。更一般地说,我想要$ARGUMMENTTOMYSCRIPT
  • 我想不出你为什么会想要它,除了作为家庭作业。你想实现什么比传递变量更简单?
  • 标签包含bash,但您正在使用sh 运行脚本。你想用哪一个?
  • @l0b0 我使用的是 bash 版本 4.2.10

标签: bash shell variables arguments command-line-arguments


【解决方案1】:

这样的东西应该适合你:

#!/bin/bash

ARG=$1
VAL=${!ARG}
echo $VAL

如果你像这样执行你的脚本:

./myscript.sh PATH

它在 STDOUT 上打印$PATH 值。

【讨论】:

  • 两种可能性都给我Bad substitution Ubuntu 11.10,bash v. 4.2,不幸的是:.-(
  • 如果你使用sh 运行你的脚本,那就不足为奇了。 sh 不是 Bash。
  • @l0b0 你想告诉我什么?它的 GNU bash。
  • 我非常怀疑。这个脚本可以在我的机器上运行(只运行./script.sh PATHnot sh ./script.sh PATH),运行 Ubuntu 11.10 和 Bash 4.2.10。如果您使用sh 运行它,您将覆盖shebang 行,就像它是Dash 一样运行它,但事实并非如此。这就是您看到“错误替换”的原因。
【解决方案2】:
#!/bin/bash
FOO=$(eval echo \$$1)
echo args: $FOO

给予:

$ foo.sh HOME
args: /home/bos

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多