这是我在这里的第一个问题,所以。。。我希望我做得对。
我正在尝试写一个小的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
。几点:
- 本地声明应该在顶部,否则如果条件不满足,您将冒着echo从全局范围访问"$myvariable"的风险
[
应该是test
(外部程序)的语法糖,而[[
应该是内置程序;更喜欢内置(更快+更智能)- 除非你真的知道自己在做什么,否则总是引用你的变量(如果你不引用"$1",如果
$1
为空,你会在[[
中得到语法错误。) - 如果您的
if
只有一个分支(较短),则可以使用&&
或||
进行控制流
试试这个:
#!/bin/bash
function example {
if [ $1 == "my_string" ]; then
local my_variable=10
fi
echo $my_variable
}
example my_string
这为我打印了10(注意:local:只能在函数中使用,这在这里很好,对函数的调用必须在shell脚本本身中完成,如上所示)