if中的zsh变量赋值



这是我在这里的第一个问题,所以。。。我希望我做得对。

我正在尝试写一个小的zsh脚本——下面的例子简化了我所拥有的:

function example {
    if [ $1 == "my_string" ]; then
        local my_variable=10
    fi
    echo $my_variable
}
// i want
$> example my_string
$> 10
// i get
$> example:1: = not found

我一直在尝试使用和不使用局部变量,我尝试声明和使用或不使用空格,以及在谷歌上搜索了几个小时。

t.i.a.

编辑:附加信息我使用的是Mac OSX Mavericks-iTerm2,我安装了哦,我的zsh-这个脚本是直接在我的~/.zshrc 中编写的

在zsh中,当设置了equals选项时,键入=program将扩展到该程序的路径。这里,zsh将==解释为";到CCD_ 4程序的路径";而且,找不到它,打印了一个错误。您可以引用它,也可以使用[[ ... ]]

这样做:

example() {
    local my_variable
    [[ "$1" == "my_string" ]] && my_variable=10
    echo "$my_variable"
}

这是现代bash,也适用于zsh。几点:

  1. 本地声明应该在顶部,否则如果条件不满足,您将冒着echo从全局范围访问"$myvariable"的风险
  2. [应该是test(外部程序)的语法糖,而[[应该是内置程序;更喜欢内置(更快+更智能)
  3. 除非你真的知道自己在做什么,否则总是引用你的变量(如果你不引用"$1",如果$1为空,你会在[[中得到语法错误。)
  4. 如果您的if只有一个分支(较短),则可以使用&&||进行控制流

试试这个:

#!/bin/bash
function example {
    if [ $1 == "my_string" ]; then
        local my_variable=10
    fi
    echo $my_variable
}
example my_string

这为我打印了10(注意:local:只能在函数中使用,这在这里很好,对函数的调用必须在shell脚本本身中完成,如上所示)

相关内容

  • 没有找到相关文章

最新更新