if中的zsh变量赋值

时间:2014-10-13 10:21:08

标签: macos variables zsh iterm

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

我正在尝试编写一个小的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并且我安装了oh-my-zsh - 这个脚本直接在我的〜/ .zshrc中编写

3 个答案:

答案 0 :(得分:3)

在zsh中,当设置equals选项时,键入=program将扩展到该程序的路径。在这里,zsh将==解释为“=程序的路径,而不是找到它,打印错误。您可以引用它或使用[[ ... ]]代替。

答案 1 :(得分:1)

这样做:

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

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

  1. 本地声明应位于顶部,否则您可能会冒险回复" $ my_variable"如果条件不满足,则从全球范围
  2. [应该是test(外部程序)的语法糖,而[[应该是内置的;更喜欢内置(更快+更聪明)
  3. 总是引用你的变量,除非你真的知道自己在做什么(如果你不引用" $ 1",你会在{{1}内得到语法错误如果[[为空。)
  4. 如果您的$1只有一个分支(更短),则可以使用&&||作为控制流。

答案 2 :(得分:0)

试试这个:

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

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