繁体   English   中英

zsh 变量赋值 if

[英]zsh variable assignment within if

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

我正在尝试编写一个小的 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

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

蒂亚

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

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

像这样做:

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

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

  1. 本地声明应该在顶部,否则如果条件不满足,你的回声可能会从全局范围访问“$my_variable”
  2. [应该是test语法糖(一个外部程序)而[[应该是一个内置的; 更喜欢内置函数(更快+更智能)
  3. 除非你真的知道你在做什么,否则总是引用你的变量(如果你不引用“$1”,你会在[[如果$1是空的。)
  4. 您可以使用&&|| 如果您的if只有一个分支(较短), if用于控制流。

试试这个:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM