全部,
尽管我对 bash 感到厌恶,但我想我应该尝试一下 zsh,它似乎被很好地谈论。所以,我立刻就遇到了这堵砖墙:
function z
{
var="ls -l"
"$var"
}
Run Code Online (Sandbox Code Playgroud)
在 bash 中执行“ls -l”,在 zsh 中它给我“找不到命令:ls -l”,因为我对 zsh 完全陌生,所以我不知道它和 bash 之间可能有什么不同,这会导致多于。
(我假设你的意思$var是倒数第二行而不是"$var"。)
Zsh 并不努力与传统的 Bourne shell 完全兼容。sh 和 zsh 之间主要的不兼容变化是,不$var带引号的参数替换 ( ) 在 sh(以及 ksh 和 bash)中经历字段分割和文件名生成(通配符),但在 zsh 中则不然。在 zsh 中,$var始终扩展为单个单词(除非var是数组变量),此处ls -l,而在 sh 中将$var扩展为两个单词ls l-。
您可以通过写入强制对 zsh 中的扩展结果进行字段分割$=var,并且可以通过写入强制生成文件名$~var($~=var或$=~var同时扩展两者)。这很少是必要的;通常,如果您需要扩展为多个单词,您将在变量中存储多个单词。