为什么在左手侧arg上展开导致错误

问题描述:

我不小心在我的一个脚本中写下了下一个任务: $X=$(echo 'astring')=astring: command not found失败。 正确的和预期的作业是X=$(echo 'astring'),其工作和设置X='astring'。 问题是第一个会发生什么? $是否试图执行右侧的结果?如果是这样,那么为什么它也纳入=呢?我很困惑。为什么在左手侧arg上展开导致错误

+0

你是否理解'echo X'和'echo $ X'之间的区别?同样的东西就在这里。 – Mat

$X=$(echo 'astring')的行为取决于$X的内容。当它是空的(它有可能是),它扩展为一个空字符串,剩下的字符串被解释为一个命令

$X=$(echo 'astring') 
    =astring 

如果$X包含的东西,如“ASTRING”,字符串扩展到

astring=astring 

但它不设置像一些人认为的$astring变量,因为扩展的顺序。任何扩展发生之前,都会识别分配。所以,它又被解释为一个命令

astring=astring: command not found