test.sh というスクリプトがあります:
#!/bin/bash
STR = "Hello World"
echo $STR
実行するとsh test.sh
次のようになります:
test.sh: line 2: STR: command not found
何が間違っているのでしょうか? 非常に基本的な初心者向けの bash スクリプト チュートリアルをオンラインで確認したところ、変数を宣言する方法が次のように記載されていました... そのため、何が間違っているのかわかりません。
私は Ubuntu Server 9.10 を使用しています。そして、はい、bash は にあります/bin/bash
。
ベストアンサー1
記号の周囲にスペースを入れることはできません=
。
次のように書くと:
STR = "foo"
STR
bashは2つの引数(文字列=
とfoo
)を持つ名前のコマンドを実行しようとします。
次のように書くと:
STR =foo
STR
bashは、1つの引数(文字列=foo
)を持つ名前のコマンドを実行しようとします。
次のように書くと:
STR= foo
foo
bash は、環境内の STR を空の文字列に設定してコマンドを実行しようとします。
これが明確化に役立つか、それとも単なるごまかしなのかはわかりませんが、次の点に注意してください。
- 最初のコマンドは、次のものと全く同じです:
STR "=" "foo"
、 - 2番目は
STR "=foo"
、 - 最後は と同等です
STR="" foo
。
関連するセクションsh 言語仕様、セクション 2.9.1状態:
「単純コマンド」とは、任意の順序でオプションの変数割り当てとリダイレクトのシーケンスであり、オプションで単語とリダイレクトが続き、制御演算子で終了します。
このコンテキストでは、 はword
bash が実行するコマンドです。 を含む文字列=
(文字列の先頭以外の任意の位置) のうち、リダイレクトではなく、 の前の文字列の部分が=
有効な変数名である場合は、変数割り当てとなります。一方、 がリダイレクトでも変数割り当てでもない文字列は、コマンドです。 ではSTR = "foo"
、STR
は変数割り当てではありません。