0

bash“变量”与其他“普通”编程语言中的变量有什么不同吗?

是因为它们是由先前程序的输出设置还是必须由某种文字文本设置,即它们必须由某些程序的输出或通过标准输入/输出输出文本的东西设置,或者控制台之类的?

我不知道如何使用正确的词汇,但是任何人都可以理解我想说的话,也许可以使用正确的词,或者向我指出一些我可以更好地理解 bash 变量概念的文档。

4

2 回答 2

3

在大多数语言中,变量可以包含不同类型的值。例如,在 Python 中,变量可以是可以对 ( a-1) 进行算术运算的数字、可以拆分的数组或字符串 ( a[3:]) 或自定义的嵌套对象 ( person.name.first_name)。

在 bash 中,您不能直接执行任何操作。如果我理解你的话,你问为什么会这样。

您不能在 bash 中做同样的事情有两个原因。

一:环境变量(通常)是简单的 key=value 字符串,原始的 sh 是 Unix 进程模型之上的一个非常薄的包装器。出于技术和兼容性原因,Bash 的工作方式相同。由于所有变量都是(基于)字符串,因此您不能真正拥有丰富的嵌套类型。

这也意味着您不能在您调用的子shell/下标中设置变量。该变量不会在父脚本中设置,因为这不是环境变量的工作方式。

二:原始的 sh 没有分离代码和数据,因为这使得交互工作更容易。Sh 将所有非特殊字符视为文字。即被find / -name foo认为是四个文字字符串:一个命令和三个参数。

Bash 不能仅仅决定find / -name现在意味着“变量 find 的值除以变量 name 的否定值”,因为这意味着每个人的 find 命令都会开始中断。这就是为什么你不能拥有其他语言的简单解引用语法。

甚至$name-1不能用于减法,因为它可以很容易地用作$name-1-12-2012.tar.gz带有时间戳的文件名的一部分。

于 2013-01-29T06:52:01.493 回答
1

我会说它与 Bash 函数有关。Bash 函数不能返回值,只能返回状态码。

所以使用 Bash 你可以拥有一个功能

foo ()
{
  grep bar baz
}

但是如果你尝试“保存”函数的返回值

quux=$?

它只是保存退出状态,而不是任何值。与 Javascript 等语言相比,函数实际上可以返回值。

foo ()
{
  return document.getElementById("dog").getAttribute("cat");
}

并像这样保存

quux = foo();
于 2013-01-29T05:59:34.350 回答