bash“变量”与其他“普通”编程语言中的变量有什么不同吗?
是因为它们是由先前程序的输出设置还是必须由某种文字文本设置,即它们必须由某些程序的输出或通过标准输入/输出输出文本的东西设置,或者控制台之类的?
我不知道如何使用正确的词汇,但是任何人都可以理解我想说的话,也许可以使用正确的词,或者向我指出一些我可以更好地理解 bash 变量概念的文档。
在大多数语言中,变量可以包含不同类型的值。例如,在 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
带有时间戳的文件名的一部分。
我会说它与 Bash 函数有关。Bash 函数不能返回值,只能返回状态码。
所以使用 Bash 你可以拥有一个功能
foo ()
{
grep bar baz
}
但是如果你尝试“保存”函数的返回值
quux=$?
它只是保存退出状态,而不是任何值。与 Javascript 等语言相比,函数实际上可以返回值。
foo ()
{
return document.getElementById("dog").getAttribute("cat");
}
并像这样保存
quux = foo();