': 読み取りの有効な識別子ではありません

': 読み取りの有効な識別子ではありません

Notepad++ を使用して次のように入力します:

    read s
    echo "$s"

出力は次のとおりです。

<code>': 有効な識別子ではありません</code>

そしてセミコロンを入れてみます:

read s;
echo "$s"

出力は次のようになります。

ここに画像の説明を入力してください

ファイルを として保存しq.sh、cygwin で実行しましたが、それでも演算子を使用できないreadため混乱しています。他のエディターviも試しましたが、出力は同じです。

何が問題なのでしょうか? どうすれば解決できるでしょうか?

答え1

シェル スクリプトを構成するテキスト ファイルは、Notepad++ で作成されました。このエディターは、デフォルトでファイルを DOS テキスト ファイルとして保存しますが、Unix の観点から見ると、\r各行の末尾に余分な改行 ( ) が付きます。これにより、 が混乱しますsh

削除するには:

$ tr -d '\r' <q.sh >q-new.sh
$ mv q-new.sh q.sh

スクリプトする行がありません#!(コメントで指摘されているように) が、明示的なインタープリター ( ) で実行する限りsh q.sh、これは必要ありません。

行を追加する

#!/bin/sh

は、( の後にchmod +x q.sh) それを として実行すると、./q.shで実行した場合とまったく同じように動作しますsh q.sh

答え2

Notepad++ にアクセスできる場合は、Unix のキャリッジ リターンを変換する別の方法があります。Notepad で、[編集] -> [EOL 変換] -> [Unix (LF)] に進みます。

フランス語では、Edition -> Convertir les sauts de ligne -> Converti au format Unix (LF) です。

もっと早くできます。

関連情報