为什么在左手侧arg上展开导致错误
问题描述:
我不小心在我的一个脚本中写下了下一个任务: $X=$(echo 'astring')
与=astring: command not found
失败。 正确的和预期的作业是X=$(echo 'astring')
,其工作和设置X='astring'
。 问题是第一个会发生什么? $
是否试图执行右侧的结果?如果是这样,那么为什么它也纳入=
呢?我很困惑。为什么在左手侧arg上展开导致错误
答
$X=$(echo 'astring')
的行为取决于$X
的内容。当它是空的(它有可能是),它扩展为一个空字符串,剩下的字符串被解释为一个命令
$X=$(echo 'astring')
=astring
如果$X
包含的东西,如“ASTRING”,字符串扩展到
astring=astring
但它不设置像一些人认为的$astring
变量,因为扩展的顺序。任何扩展发生之前,都会识别分配。所以,它又被解释为一个命令
astring=astring: command not found
你是否理解'echo X'和'echo $ X'之间的区别?同样的东西就在这里。 – Mat