質問

test.sh というスクリプトがあります。

#!/bin/bash
STR = "Hello World"
echo $STR

走るとき sh test.sh これはわかります:

test.sh: line 2: STR: command not found

私の何が間違っているのでしょうか?オンラインで非常に基本的な/初心者向けの bash スクリプトチュートリアルを見てみると、これが変数を宣言する方法だと書かれています...だから、何が間違っているのかわかりません。

私はUbuntuサーバー9.10を使用しています。はい、bash は次の場所にあります。 /bin/bash.

役に立ちましたか?

解決

「=」記号の周囲にスペースを入れることはできません。

書くとき:

STR = "foo"

bash は、2 つの引数 (文字列「=」と「foo」) を指定して STR という名前のコマンドを実行しようとします。

書くとき:

STR =foo

bash は 1 つの引数 (文字列 '=foo') を指定して STR という名前のコマンドを実行しようとします。

書くとき:

STR= foo

bash は、環境内で STR を空の文字列に設定してコマンド foo を実行しようとします。

これが明確化に役立つのか、それとも単なる難読化なのかはわかりませんが、次のことに注意してください。

  1. 最初のコマンドは次とまったく同じです。 STR "=" "foo",
  2. 2番目は同じです STR "=foo",
  3. そして最後は次と同等です STR="" foo.

の関連セクション sh 言語仕様、セクション 2.9.1 状態:

「単純なコマンド」とは、オプションの変数割り当てとリダイレクトのシーケンスであり、任意の順序で、その後にオプションで単語とリダイレクトが続き、制御演算子で終了します。

その文脈では、 word は bash が実行するコマンドです。を含む任意の文字列 = リダイレクトではない (文字列の先頭以外の任意の位置にある) 変数割り当ては、リダイレクトではなく、次の内容を含まない文字列です。 = はコマンドです。で STR = "foo", STR 変数代入ではありません。

他のヒント

=記号の前後にスペースをドロップします:

#!/bin/bash 
STR="Hello World" 
echo $STR 

対話モードでは、すべてが正常に見える。

$ str="Hello World"
$ echo $str
Hello World

明らかに!ヨハネスが言ったように、スペースなしの周りに「=」。場合は、その後、対話型モードでは、

`としてエラーが発生します「=」の周りのすべてのスペースがあります
  

ノーコマンド 'STR' が見つかり

私は、これは非常に高品質の答えを回答されている知っています。しかし、短期的に、あなたがスペースを持ってカントます。

#!/bin/bash
STR = "Hello World"
echo $STR

ので等号の前後のスペースで動作しませんでした。あなたが実行した場合...

#!/bin/bash
STR="Hello World"
echo $STR

これは動作します。

あなたが任意の変数を定義するときは、

あなたが余分なスペースに配置する必要はありません。

例えばます。

name = "Stack Overflow"  
// it is not valid, you will get an error saying- "Command not found"

だから、スペースを削除します:

name="Stack Overflow" 

とそれが正常に動作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top