Linux shell 中“var=${str=expr}”是什么意思?

Linux shell 中“var=${str=expr}”是什么意思?

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 中。

相关内容