2

これは非常に単純であるか、実行できないかのどちらかですが、何時間も見て困惑しています。Appleスクリプトにbashを使い始めたところです。

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が再宣言されることはありません。エコー「hello、world」を入力すると出力されるため、ifステートメントは確実に機能します。

私はPHPから来ているので、デスクトップ構文が不足しています。

みんなありがとう

4

3 に答える 3

4

AFAIK、最初は構文エラーです。

2つ目は、ラウンドパレンが別のコンテキストを導入するため、そこで定義された変数はその外部に表示されません。かっこで起こることはかっこにとどまります。

私はあなたがこれを望んでいると信じています:

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)
$ 

括弧はサブシェルを開始することに注意してください。親内で行われた変数の割り当ては、親シェルに伝播されません。

$ 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)"; }

とはいえ、&&演算子の後にコマンドが1つしかないため、中括弧はオプションです。そのため、Amadanの回答が優先され、sarnoldの回答は括弧の使用に関する問題を説明しています。中かっこ付きのバージョンを機能させる方法を示します。

于 2012-05-10T22:45:08.870 に答える