2016-09-15 13 views
0

OSXでTerminal(bash)を使用し、入力からディレクトリを作成する実行可能スクリプトを作成しようとしていますが、スペースを含む文字列を入力するときに問題がありますスペースが必要です)。ターミナル(bash) - 読み込み入力文字列のmkdir

たとえば、下のコードで「new folder」を入力すると、「new」と「folder」の2つのフォルダが作成されます。

read dName; mkdir $dName 

しかし、私はこの名前のフォルダを取得していますいくつかの理由については、以下のコードを、と:「%80%9D

read dName; mkdir "$dName" 

私は、実行可能なスクリプトを使用せずに、端末に第二のコードを入れた場合は、私はなぜそれを実行するために実行可能なスクリプトを使用して "%80%9Dのフォルダ名の代わりに私を与えるかわかりません。可能であればお手伝いください。

+0

コードで通常のASCII引用符を使用していますか、または中括弧引用符を使用していますか?右中括弧 '' 'はUTF-8エンコーディングとして' E2 80 9D'を持っています。 – chepner

答えて

1

スクリプトでは、通常のASCII引用符ではなく、かっこ引用符を使用しています。あなたのスクリプトは、mkdirへの引数は、次のバイトストリームとして格納されることを意味し、UTF-8でエンコードされている:

  • e2 80 9c - 左の巻き毛引用
  • 24 64 4e 61 6d 65から$dbash
  • e2 80 9d - 右巻き毛引用

ただし、スクリプトがの場合は、となります。これらのバイトは、ISO-Latin-1を使用して解釈されているように見えます。 e2は識別子名の有効なバイトであり、実際には何もエスケープしないので、bashは空の文字列に展開される単一の未定義変数の展開として$dBash%E2を参照します。したがって、mkdirは、引数として%e2%80%9c%90%9dを受け取ります。要求されたファイル名が作成されます。ディレクトリをリストすると、最初の3バイトはUTF-8として解釈され、左の中かっこが表示されますが、残りの2つは解釈を持たず、そのまま表示されます。

+0

Take-homeメッセージ:ワープロではなく*テキスト*エディタでコードを編集します。 –

関連する問題