如何在脚本中更改参数的值?


11

我尝试了以下小的简单脚本:

#!/bin/bash
$1="bar"
echo $1

但是当我运行时,./script foo我得到了错误,并且值没有改变:

/home/mika/script: line 2: foo=bar: command not found
foo

我知道$ 1是您传递给脚本的第一个参数。但是即使这样,我也想改变它的价值。


Answers:


10

您可以使用内置的set

#!/bin/bash
set -- "bar"
echo $1

参考资料和更多信息:更改命令行参数-bash


我尝试过,但是它仍然回显“ foo”。你得到不同的结果了吗?确保将“ foo”传递给脚本。
马蒂·弗里德

@MartyFried Ups,对不起,我只是更新我的答案。
RaduRădeanu2014年

那个有效。:-)很好的答案...我想我以为他不想这样做,而且我不确定他为什么这么做,但是实际上你的答案比我的建议更正确。感谢您的链接。
马蒂·弗里德

4

您不能直接更改这些变量。你可以说:

x=$1
echo $x

那你可以$x改用

using $1=bar将立即用第一个参数替换$1,您实际上是在说"foo=bar",它被解释为命令“ foo”,而不是变量“ foo”;


好主意,但要取决于OP到底要完成什么...从我这里+1。
RaduRădeanu2014年

2

$1在此bash和其他shell中,请勿为此使用use ,这$1是您传递给脚本的第一个参数:

#!/bin/bash
echo $1

如果以as身份运行上述命令foo.sh hello,则将打印hello该命令,因为这是第一个参数。同样,您将变量称为,var并将变量的内容称为$var。因此,要获得您期望的行为,只需为变量使用另一个名称,而不使用$

#!/bin/bash
var="bar"
echo $var

这个小脚本只是使人们了解我想要的一个示例。我知道$ 1是您传递给脚本的第一个参数。但是,即使这样,我也想改变它的价值。我需要在另一个大脚本中应用它。谢谢。
user258266 2014年

@ user258266不会。只需使用新值调用大脚本,不要将其$1用于要更改的值。无论如何,只要您修复语法错误,它就应该起作用,您的主要问题是您正在使用$
2014年

但是我需要...我在这里无法解释原因...也许我会编辑我的问题。
2014年

@ user258266,请这样做。您正在尝试将变量设置为$foo="bar",这是行不通的,而您foo="bar"无需设置$
terdon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.