web-dev-qa-db-ja.com

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

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

    read s
    echo "$s"

出力は次のとおりです。

<code>': not a valid identifier</code>

そして、セミコロンを付けようとします。

read s;
echo "$s"

出力は次のとおりです。

enter image description here

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

なにが問題ですか?それを機能させる方法は?

2
Jan Nutcha

シェルスクリプトを構成するテキストファイルは、Notepad ++で記述されています。このエディタは、デフォルトでファイルをDOSテキストファイルとして保存します。これは、Unixの観点から、各行の終わりに余分なキャリッジリターン(\r)があります。これはshを混乱させます。

それを削除するには:

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

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

行を追加する

#!/bin/sh

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

1
Kusalananda

Notepad ++にアクセスできる場合、Unixのキャリッジリターンを変換する別の方法。メモ帳で、次の手順に進みます:編集-> EOL変換-> Unix(LF)

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

それはより速くなることができます。

1
Kevin Brun