これら3つの追加文字は何ですか?なぜそんなに奇妙なエラーが発生するのですか? [コピー]

これら3つの追加文字は何ですか?なぜそんなに奇妙なエラーが発生するのですか? [コピー]

次の2つのファイルを確認してください。

私の考えはまったく同じようですが、ファイル1のサイズは41バイト、ファイル2のサイズは44バイトです。

今、3つの追加文字は気にしません。しかし、これらの文字も奇妙なエラーを引き起こすと思います。このファイルを複製して実行すると、ファイル1は正常に実行されますが、ファイル2は行3でエラーを返します。 ./BasicCheck.sh: 行 3: cd: case0: そのファイルやディレクトリはありません。

それでは、この追加文字は何ですか?なぜエラーが発生するのですか?これらのエラーを修正するにはどうすればよいですか?

私の考えでは、彼らは改行されます。おそらく、ファイル1にはLinuxベースの改行があり、ファイル2にはWindowsベースの改行があります。そうなんですか?なぜそのようなエラーが発生するのですか?

答え1

このfileコマンドは問題を指摘しています。

% file file*
file1: Bourne-Again shell script, ASCII text executable
file2: Bourne-Again shell script, ASCII text executable, with CRLF line terminators

2番目のスクリプトは「DOS」形式です。したがって、期待どおりに動作しません。今に変換すると、dos2unix結果は同じです

% dos2unix file2
dos2unix: converting file file2 to Unix format ...

% ls -l file1 file2
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:23 file1
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:25 file2

UnixコマンドでDOSフォーマットファイルを使用しようとすると、各行の最後にcontrol-Mが付けられます。だから、次の行

a=b

trueをabに設定し、control-Mを使用して簡単に設定します^M

a=b^M

すべてのコマンドは同様に影響を受けます。たとえば、2つの文字コマンドを含む単純な行は、存在しない3ls文字のコマンドを実行しようとします。ls<control-M>

関連情報