linux shell 中“var=${str=expr}”是什么意思?谁能具体解释一下?
答案1
参见“参数扩展”部分man bash
:
${parameter:=word}
分配默认值。如果参数未设置或为空,则将 word 的扩展分配给参数。然后替换参数的值。位置参数和特殊参数不能以这种方式分配。
上面已经对冒号做了解释:
不执行子字符串扩展时,使用下面记录的形式,bash 会测试未设置或为空的参数。省略冒号会导致仅测试未设置的参数。
证据:
var=${str=expr}
echo $var
echo $str
输出:
expr
expr
答案2
在 bash 中,您可以使用 $() 在子 shell 中启动任务。
例子:
#!/usr/bin/env bash
foo=${ls}
echo $foo
该脚本将使用 的结果填充变量 $foo (并向您显示内容)ls
。echo $foo
现在回答你更具体的问题。我也不知道结果,所以我测试了一下,假设“linux shell”指的是 bash,这是我的 linux 发行版上的默认 shell。
我创建了以下文件:
#!/usr/bin/env bash
foo=${str="test 1 2 3"}
echo $foo
并运行它:
> ./test t
test 1 2 3
它似乎将字符串(或表达式)中的值分配给变量和将该值返回给父脚本。
回顾一下:
- 将启动一个新 shell
- 新的 shell 将运行命令
str=expr
- 父 shell 将会得到结果作为输出。
- 父 shell 将结果存储在 $var 中。