ファイル名に特殊文字を使用する

ファイル名に特殊文字を使用する

というファイルを作成する必要があります。*'test'*

書くならtouch \'test\'

lsプログラム'test'

しかし、私が書くならtouch \*\'test\'\*

ls今見せて*'\''test'\''*

どのようなヒントがありますか?誰かが私が間違っていることを説明できますか?

私のオペレーティングシステムはUbuntu 20.04です。

答え1

問題はGNUlsです役に立つあいまいでない引用形式で奇妙なファイル名を出力します。これは、シェルに入力して同じ名前を取得する方法と似ています。

時には役に立ちますが、時には混乱だけを加重させるだけです。この機能をオフにするには、制御環境変数を設定します。

export QUOTING_STYLE=literal
ls

または、対応するコマンドラインフラグを使用してください。

ls --quoting-style=literal

またはより短いですls -N

以下を引用して、奇妙な文字を含むファイル名を作成できます。

touch "*'test'*"                       # « *'test'* »

シェルがコマンドラインを実行する前に引用符付き文字列を処理するので、さまざまな種類の引用符付きの文字列が隣接する可能性があることに注意してください(ここでは、単一引用符で囲まれた文字列と二重引用符で囲まれた文字列があります)。

touch 'Quotes "here" at'" 5 o'clock"    # « Quotes "here" at 5 o'clock »
#     '←-first-string-→'"←-second-→"

あなたの例:

touch \'test\'                         # « 'test' »
touch \*\'test\'\*                     # « *'test'* »

ls -1 --quoting-style=literal          # List files one per line
  *'test'*
  'test'

答え2

書くならtouch \'test\'

lsディスプレイ'test'

いいえ!見せてください"'test'"

しかし、私が書くならtouch \*\'test\'\*

ls が表示されます。*'\''test'\''*

いいえ!見せてください'*'\''test'\''*'

最新バージョンのGNU lsは、Bourneスタイルのシェル(bash、zshなど、Fishとも互換性があると思います)に入力できるようにファイル名を表示します。touch "'test'"andを使用してこれらのファイルを作成できます'*'\''test'\''*'(もちろんこれを参照する方法はいくつかあり、他の方法を選択するのに問題はありません)。

lsファイル名を印刷するなど、特殊文字を表示するために別の方法を使用するように指示できますls --literal(名前に列の表示と混同される可能性のある空白が含まれているか、名前に改行文字が含まれているか、そうでない場合など)が曖昧な場合でも同様)。 -印刷可能文字)。バラより出荷書類ビーチ--quoting-style他のスタイルも可能です。

答え3

一部のシステムでは、ls「特殊」文字を含むファイル名に一重引用符を追加します。バラよりこの問題もっと学ぶ。

最終ファイル名に一重引用符が必要なので、二重引用符を使用できます(ディレクトリに他のファイルがない限り)。私のUbuntu 22.04では期待どおりに動作します。

touch "*'test'*"
ls --quoting-style=literal

関連情報