Bash:在if语句中声明值

时间:2012-05-10 22:32:52

标签: bash shell

这可能是死的简单或无法完成,但看了几个小时后我才难倒。刚开始使用bash作为Apple脚本。

show_name=${BASH_REMATCH[1]} #show_name is declared

test "$show_name" == "Smash" && {show_name="Smash (2012)"} #redeclare the value from 'Smash' to 'Smash (2012)

还尝试了一些变化,例如

test "$show_name_temp" == "Smash" && (show_name="Smash (2012)"; exit 1)

但是,show_name的值永远不会被重新声明。 if语句肯定是有效的,因为如果我把一个echo“hello,world”放进去,它会打印出来。

我来自PHP,所以我的桌面语法不足。

谢谢你们

3 个答案:

答案 0 :(得分:4)

AFAIK,第一个是语法错误。

第二个,圆形的parens将引入另一个上下文,因此在那里定义的任何变量都不会在它之外可见。在parens中发生的事情会留在parens中。

我相信你想要这个:

test "$show_name" == "Smash" && show_name="Smash (2012)"

答案 1 :(得分:3)

也许括号会妨碍:

$ show_name="Smash"
$ test $show_name == "Smash" && show_name="Smash (2012)"
$ echo $show_name
Smash (2012)
$ 

请注意,括号将启动子shell - 在parens中进行的变量赋值将不会传播到父shell:

$ show_name="Smash"
$ test $show_name == "Smash" && (show_name="Smash (2012)")
$ echo $show_name
Smash
$ 

答案 2 :(得分:1)

大括号不会将字符串分解为单词,因此需要通过空格将其与内容分开。此外,{}内的命令必须以分号(;)结束。

test "$show_name" == "Smash" && { show_name="Smash (2012)"; }

也就是说,大括号是可选的,因为你只有一个命令跟随&&操作员,所以Amadan的答案是首选,而sarnold的答案解释了使用括号的问题。我只是展示如何使用括号的版本。