无法将Bash脚本转换为Zsh脚本

Léo*_* 준영 5 bash zsh

我需要将以下Bash代码更改为Zsh

TODO_OPTIONS="--timeout --summary"
         cd ()
         {   
             builtin cd "$@"
             RV=$?
             [ $RV = 0 -a -r .todo ] && devtodo ${TODO_OPTIONS}
             return $RV 
         }   

         pushd ()
         {   
             builtin pushd "$@"
             RV=$?
             [ $RV = 0 -a -r .todo ] && devtodo ${TODO_OPTIONS}
             return $RV 
         }   

         popd ()
         {   
             builtin popd "$@"
             RV=$?   
             [ $RV = 0 -a -r .todo ] && devtodo ${TODO_OPTIONS}
             return $RV 
         }   

         # Run todo initially upon login
         devtodo ${TODO_OPTIONS} 
Run Code Online (Sandbox Code Playgroud)

当我用代码启动Zsh时出现以下错误

todo: error, unknown argument '--timeout --summary', try --help
Run Code Online (Sandbox Code Playgroud)

我觉得Zsh无法理解以下几行

[ $RV = 0 -a -r .todo ] && devtodo ${TODO_OPTIONS}
Run Code Online (Sandbox Code Playgroud)

第一个代码中的其他命令似乎适合Zsh.

如何将代码转换为Zsh?

vir*_*tor 4

您将文本保存为一个字符串/对象,而不是作为一个简单的“要替换的东西”。您可以正确保存字符串:

TODO_OPTIONS=(--timeout --summary)
....
devtodo ${TODO_OPTIONS}
Run Code Online (Sandbox Code Playgroud)

或者对变量运行分词:

TODO_OPTIONS="--timeout --summary"
....
devtodo ${=TODO_OPTIONS}
Run Code Online (Sandbox Code Playgroud)