我尝试了以下简单的小脚本:
#!/bin/bash
$1="bar"
echo $1
但是当我运行时./script foo
出现错误并且值没有改变:
/home/mika/script: line 2: foo=bar: command not found
foo
我知道 $1 是你传递给脚本的第一个参数。但即便如此,我也想改变它的值。
答案1
答案2
您不能直接更改这些变量。您可以说:
x=$1
echo $x
$x
然后你可以使用
使用$1=bar
将立即用第一个参数替换$1
,并且您实际上是在陈述"foo=bar"
,并且它被解释为命令“foo”,而不是变量“foo”;
答案3
不要使用$1
这个,在bash
和其他 shell 中,$1
这是传递给脚本的第一个参数:
#!/bin/bash
echo $1
如果你将上述代码作为 运行foo.sh hello
,它将打印,hello
因为这是第一个参数。此外,你可以将变量作为 引用,var
也可以将变量作为内容因此$var
,为了获得您期望的行为,只需对变量使用另一个名称,并且不要使用$
:
#!/bin/bash
var="bar"
echo $var
答案4
作为主要答案来自@Radu Rădeanu,您可以一次设置多个参数,如下所示:
# set arguments `$1`, `$2`, and `$3` to these respective values
set -- "one" "two" "three"
echo "$1 $2 $3"
输出:
one two three
也可以看看
- 我在 Stack Overflow 上的详细回答如下:如何使用 bash 中的命令行参数
$1
、等进行更改$2
set --
- 我会更进一步解释更多内容,包括使用 bash 数组切片来保留更改参数前后的原始参数。查看以了解更多信息。