为什么带有空格的 TEST = Hello 在终端中不起作用?

为什么带有空格的 TEST = Hello 在终端中不起作用?

当我想在终端中定义 TEST 时,例如:TEST = Hello,它显示:TEST:未找到命令。为什么它只像 TEST=Hello 那样工作。我问这个问题是因为我的 makefile 中的所有定义都是这样的,我不想改变它。

答案1

Makefile 由程序读取和处理make,而 shell 脚本由 shell 解释器读取和处理 - 它们具有不同的变量赋值语法和解析规则。

没什么可说的不能解析带有空格的赋值=-make事实上,一些 shell(尤其是csh)就是这样做的,例如

#!/bin/csh

set test = hello
echo "$test"

然而 POSIX/bin/sh和 Bourne 派生的bash以及 和ksh不允许zsh这样做。

答案2

在 bash 中,变量赋值的语法为:name=[value]。您不能在 周围放置未加引号的空格,=因为 bash 不会将其解释为您想要的赋值。bash 将大多数单词列表视为带有参数的命令,例如abc =def # call the command or function 'abc' with '=def' as an argument 来源

相关内容