1. ホーム
  2. bash

[解決済み] Bashの変数代入でCommand not foundエラーが発生する

2022-03-16 09:48:32

質問

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 .

解決方法は?

の周りにスペースを入れることはできません。 = の記号を使用します。

書くとき。

STR = "foo"

という名前のコマンドを実行しようとします。 STR を2つの引数(文字列 =foo )

書くとき。

STR =foo

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

書くとき。

STR= foo

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

これで明確になるのか、単なる難読化なのかはわかりませんが、注意してください。

  1. というコマンドがありますが、最初のコマンドはまさにそれと同じです。 STR "=" "foo" ,
  2. と同じです。 STR "=foo" ,
  3. と同等であり、最後が STR="" foo .

の該当箇所は sh 言語仕様、セクション 2.9.1 と記載されています。

単純コマンドとは、任意の変数への代入とリダイレクションを任意の順序で行い、その後に単語とリダイレクションを任意に続け、制御演算子で終了させるものである。

その中で word は、bashが実行しようとするコマンドです。 を含む任意の文字列は = (文字列の先頭以外の任意の位置)で、リダイレクションでなく = が有効な変数名であれば変数代入、リダイレクションでも変数代入でもない文字列はコマンドとなります。 で STR = "foo" , STR は変数の代入ではありません。