Bash 変数割り当てでコマンドが見つからないエラー
-
20-09-2019 - |
質問
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 を実行しようとします。
これが明確化に役立つのか、それとも単なる難読化なのかはわかりませんが、次のことに注意してください。
- 最初のコマンドは次とまったく同じです。
STR "=" "foo"
, - 2番目は同じです
STR "=foo"
, - そして最後は次と同等です
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"
とそれが正常に動作します。