if [ $#!=2 ]
then
echo "Please enter two text files"
fi
これは私に与えます:
swap.sh: line 12: syntax error near unexpected token `fi'
'wap.sh: line 12: `fi
if [ $#!=2 ]
then
echo "Please enter two text files"
fi
これは私に与えます:
swap.sh: line 12: syntax error near unexpected token `fi'
'wap.sh: line 12: `fi
ここには、少なくとも 2 つの明確な問題があります。
まず、その比較の正しい構文では、!=
演算子の前後にスペースが必要です。
if [ $# != 2 ]
then
echo "Please enter two text files"
fi
しかし、これらのスペースがなければ、構文エラーではなく、単に正しくありません。 -- の$#!=2
ような 1 つの単語に単純に展開する必要があります。また、 orコマンドに 1 つの単語を指定すると、その単語が空かどうかをテストするだけです。したがって、投稿したコードは、2 つの引数を指定した場合でも、常に出力する必要があります。スペースを追加すると、その問題が解決するはずです。2!=2
[
test
"Please enter two text files"
エラーメッセージのフォーマット方法(そして、正しく表示されるように質問を編集する必要がありました。インラインコードのバッククォートはMarkdownでは扱いにくいです)、スクリプトにはWindowsスタイルの行末があるようです. のようなプログラムがある場合は、dos2unix
それを使用してスクリプトを Unix スタイルの行末に変換できます。ただし、man ページを注意深く読んでください。ほとんどの Unix スタイルのテキスト フィルターとは異なりdos2unix
、入力ファイルを変更します。
Windows スタイルの行末は、キャリッジ リターンとそれに続くライン フィード、または\r\n
. シェル (bash?)\n
は を行末文字として認識しますが、は単なる別の文字であるため、トークンとして\r
ではなく、 を認識します。そして、エラー メッセージにそのトークンを出力すると、カーソルが現在の行の先頭に移動し、ファイル名が上書きされます。実際のエラー メッセージは次のようになります。fi
if\r
\r
swap.sh: line 12: syntax error near unexpected token `fi'
'wap.sh: line 12: `fi
しかし、それは本当にこれです:
swap.sh: line 12: syntax error near unexpected token `fi'
swap.sh: line 12: `fi\r'
(Cygwin を使用していますか? この種の問題が最も一般的に現れるのは Cygwin です。)