2

这要么很简单,要么无法完成,但经过几个小时的观察,我被难住了。刚开始将 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,所以缺少桌面语法。

多谢你们

4

3 回答 3

4

AFAIK,第一个是语法错误。

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

我相信你想要这个:

test "$show_name" == "Smash" && show_name="Smash (2012)"
于 2012-05-10T22:38:19.937 回答
3

也许括号妨碍了:

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

请注意,括号开始一个子shell——在括号内进行的变量分配不会传播到父shell:

$ show_name="Smash"
$ test $show_name == "Smash" && (show_name="Smash (2012)")
$ echo $show_name
Smash
$ 
于 2012-05-10T22:39:01.040 回答
1

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

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

也就是说,大括号是可选的,因为 && 运算符后面只有一个命令,因此首选 Amadan 的答案,sarnold 的答案解释了使用括号的问题。我只是展示了如何使带有大括号的版本起作用。

于 2012-05-10T22:45:08.870 回答