这是我的第一个问题,所以......我希望我做得对。
我正在尝试编写一个小的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中编写
答案 0 :(得分:3)
在zsh中,当设置equals
选项时,键入=program
将扩展到该程序的路径。在这里,zsh将==
解释为“=
程序的路径,而不是找到它,打印错误。您可以引用它或使用[[ ... ]]
代替。
答案 1 :(得分:1)
这样做:
example() {
local my_variable
[[ "$1" == "my_string" ]] && my_variable=10
echo "$my_variable"
}
这是现代bash
,也适用于zsh
。几点:
[
应该是test
(外部程序)的语法糖,而[[
应该是内置的;更喜欢内置(更快+更聪明)[[
为空。)$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脚本本身内完成,如上所示)