当我想在终端中定义 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
来源