名前にスペースが含まれているファイルを一覧表示すると、ほとんどの場合アポストロフィで囲まれていることがわかります。
'famille, vacances, loisirs'
Chapitre 2 : L'accès au système.md
アポストロフィを含む名前でなければならないファイルを編集する必要があります。
私は試した:
gvim 'Chapitre 2 : L''accès au système.md'
中間アポストロフィは2倍で表示されます。ただし、'Chapitre 2 : Laccès au système.md'
アポストロフィがまったくないファイルを生成します。
私は試した:
gvim "Chapitre 2 : L'accès au système.md"
次のファイルが生成されます。"Chapitre 2 : L'accès au système.md"
2つの質問があります。
(システムの場合)ファイル名:
"Chapitre 2 : L'accès au système.md"
これが正常に実行されたときに名前が指定されたのと同じファイルですか?'Chapitre 2 : L'accès au système.md'
私のファイルにファイル名を書く方法は?キム
'Chapitre 2 : L'accès au système.md'
出力から読みたい正確なファイル名を取得するコマンドエルエス注文する?
答え1
ls
出力を明確にするために、シェルの引用規則を使用してファイル名が出力されるいくつかのシステムにあります。たとえば、GNU lsはQUOTING_STYLE
に設定されているか、shell
デフォルトls
のcoreutils> = 8.25で設定できます。コマンドラインにファイル名を入力するときは、シェルの引用規則も重要です。
gvim 'Chapitre 2 : L''accès au système.md'
'Chapitre 2 : Laccès au système.md'
代わりに、アポストロフィがまったくないファイルが作成されます。
シェルに 2 つの一重引用符文字列を連続して指定すると、連結されます。 SQLではこのように一重引用符を取得できますが、ほとんどの一般的なシェルでは(†)できません。表示される外側の一重引用符は、ファイル名の一部にしてはいけません。出力をls
明確にするために表示されるだけです。実際のファイル名はChapitre 2 : Laccès au système.md
。
(†POSIXスタイルのシェル(デフォルトのBash、ksh、zshなど)、(t)csh、およびFishはこれを接続として扱います。これはPythonなどで動作する方法です。他のシェル(rc / es / akanga)はSQLこれは何をしますが、zshはオプションで実行できますrcquotes
。
gvim "Chapitre 2 : L'accès au système.md"
次のファイルを作成しました。"Chapitre 2 : L'accès au système.md"
名前を生成する可能性が高いです。二重引用符は名前の一部ではなく、出力を明確にするためにChapitre 2 : L'accès au système.md
印刷されます。ls
ここでは名前に一重引用符があるので、一重引用符の代わりに二重引用符を使用します。二重引用符には特別なものがないため、この形式が最もきれいです。しかし、
- (システムの場合)ファイル名:
"Chapitre 2 : L'accès au système.md"
これが正常に実行されたときに名前が指定されたのと同じファイルですか?'Chapitre 2 : L'accès au système.md'
これが完全なファイル名で、ファイル名として有効な場合! - そうでなければ、もう一方は2つの二重引用符と1つの一重引用符を含み、もう1つは3つの二重引用符を含むため、同じではありません。
シェルの引用規則を使用して解釈するときに同じかどうかを意味する場合は、もう一度いいえです。"Chapitre 2 : L'accès au système.md"
文字列をChapitre 2 : L'accès au système.md
単一のシェル語で表します(引用符で囲むため)。
一方、'Chapitre 2 : L'accès au système.md'
文字列Chapitre 2 : Laccès
、、、 (引用符なしの空白がau
あるsystème.md
ため、3つの異なるシェルワード)と、閉じるパートナーがないオープン引用符を表します。シェルコマンドラインにこれを入力すると、閉じる引用符を取得するために別の入力行を待ちます。末尾に引用符を入れずにシェルコマンドラインでコマンドの引数として入力すると、コマンドはこれら3つの異なるファイルにアクセスしようとします。
'Chapitre 2 : L'accès au système.md'
lsコマンドの出力から読みたい正確なファイル名を取得するには、gvimコマンドにファイル名を書き込む必要がありますか?
シェルスタイルの引用文字列を出力するモードではls
出力できません'Chapitre 2 : L'accès au système.md'
。これは、有効なシェルスタイルの引用文字列ではないためです。最後に閉じていない引用符があります。
さて、最初におっしゃった内容に戻ると次のようになります。
Chapitre 2 : L'accès au système.md
アポストロフィを含む名前でなければならないファイルを編集する必要があります。
これをシェルで表現する方法はいくつかあります。その1つは二重引用符を使用することですが、この方法ls
も効果があります"Chapitre 2 : L'accès au système.md"
。これは、内部の任意の文字が二重引用符で囲まれた特別な文字ではないために機能します(スペースと一重引用符でのみ保護されます)、たとえばファイル名にドル記号が含まれている場合は機能しません。ドル記号がある場合は、バックスラッシュを使用してエスケープできます\$
。
別の方法は、一重引用符自体を除くすべての項目に一重引用符を使用し、エスケープされた一重引用符を目的の場所に配置することです'Chapitre 2 : L'\''accès au système.md'
。これには、'Chapitre 2 : L'
と\'
の3つの部分が含まれており、'accès au système.md'
引用符とバックスラッシュが削除され、結果が単一の単語に連結されますChapitre 2 : L'accès au système.md
。
答え2
両方の質問が\
解釈されないように、エスケープ特殊文字を使用してください(bashと仮定)。あなたの例に従ってください。
ls Chapitre\ 2\ :\ L\'accès\ au\ système.md
または
gvim Chapitre\ 2\ :\ L\'accès\ au\ système.md
。
よりバッシュリファレンスマニュアルより多くの情報を知りたいです。
答え3
スペースと特殊文字を含む名前は常に問題の原因となります。引用はいつも面倒です...
gvim "Chapitre 2 : L'accès au système.md"
好きなように働いています。ls
ファイル名をより明確に区別するために、追加の引用符( ")が表示されますが、名前には引用符はありません。
これにより、ls | more
保護されていない名前が表示されます。
もっと複雑な名前が本当に必要な場合(悪い考え)、引用ブロックと保護された要素を関連付けることができます(@ferranmを参照)。
はい - 3つのブロックa filename with quotes", apostrophes 'and bars (\)
の合計で名前付きファイルを作成できます"a filename with quotes"
。 ++ '", '
"apostrophes 'and bars (\)"
touch "a filename with quotes"'", '"apostrophes 'and bars (\)"