私はこのスクリプト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"
bashはSTRという名前のコマンドを2つの引数(文字列 '='と 'foo')を付けて実行しようとします。
あなたが書くとき:
STR =foo
bashはSTRという名前のコマンドを引数1つで実行しようとします(文字列 '= foo')。
あなたが書くとき:
STR= foo
bashは、その環境でSTRを空の文字列に設定してコマンドfooを実行しようとします。
これが明確にするのに役立つかどうか、あるいはそれが単なる難読化かどうかはわかりませんが、次の点に注意してください。
STR "=" "foo"
とまったく同じです。STR "=foo"
と同じです。STR="" foo
と同等です。sh言語仕様の関連セクション、セクション2.9.1 は次のように述べています。
「単純なコマンド」とは、任意の順序での任意選択の変数割り当ておよび方向変更のシーケンスであり、その後に制御演算子によって終了する、任意選択で単語および方向変更が続く。
その意味で、Word
name__はbashが実行しようとしているコマンドです。リダイレクトではない=
を含む(ストリングの先頭以外の位置にある)ストリングはすべて変数割り当てですが、リダイレクトではなく=
を含まないストリングはコマンドです。 STR = "foo"
では、STR
name__は変数代入ではありません。
=
サインの周りのスペースを削除します。
#!/bin/bash
STR="Hello World"
echo $STR
インタラクティブモードでは、すべてがうまく見えます
$ str="Hello World"
$ echo $str
Hello World
明らかに!ヨハネスが言ったように、「=」の前後にスペースはありません。 '='のまわりにスペースがある場合は対話モードでは `としてエラーを返します
コマンド 'str'が見つかりません
変数を定義するときは、余分なスペースを入れる必要はありません。
例えば。
name = "Stack Overflow"
// it is not valid, you will get an error saying- "Command not found"
だからスペースを削除します。
name="Stack Overflow"
そしてそれはうまくいきます。
私はこれが非常に質の高い答えで答えられたことを知っています。しかし、要するに、あなたはスペースを傾けることができません。
#!/bin/bash
STR = "Hello World"
echo $STR
等号の周りのスペースのためにうまくいきませんでした。走ったら….
#!/bin/bash
STR="Hello World"
echo $STR
うまくいくでしょう