Bash 変数割り当てでコマンドが見つからないエラーが発生する 質問する

Bash 変数割り当てでコマンドが見つからないエラーが発生する 質問する

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"

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

次のように書くと:

STR =foo

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

次のように書くと:

STR= foo

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

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

  1. 最初のコマンドは、次のものと全く同じです: STR "=" "foo"
  2. 2番目はSTR "=foo"
  3. 最後は と同等ですSTR="" foo

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

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

このコンテキストでは、 はwordbash が実行するコマンドです。 を含む文字列=(文字列の先頭以外の任意の位置) のうち、リダイレクトではなく、 の前の文字列の部分が=有効な変数名である場合は、変数割り当てとなります。一方、 がリダイレクトでも変数割り当てでもない文字列は、コマンドです。 ではSTR = "foo"STRは変数割り当てではありません。

おすすめ記事