这可能是死的简单或无法完成,但看了几个小时后我才难倒。刚开始使用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,所以我的桌面语法不足。
谢谢你们
答案 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的答案解释了使用括号的问题。我只是展示如何使用括号的版本。