チュートリアル:サブプロセス文字列¶

xonshの文字列は、次の2つの単純な規則に従います。

  1. xonshの文字列は常に同じ方法で解析されます。
  2. Pythonは常に勝つ!

これらのルールをまとめると、サブプロセスモードの文字列もPython文字列のように扱われます。これはあなたの正気を保つ(助ける)でしょう。

エスケープ

Xonshの文字列はPythonの文字列とまったく同じです。XonshはPythonと全く同じエスケープ文字を使用します。もはやそれ以上ではありません。これは、Pythonとは異なるエスケープシーケンスのセットを持つ他のシェルとは異なります。特に、多くのsh-langはスペースを使って(バックスラッシュスペース)エスケープすることができます"\ "

バッシュ

$ echo A\ Single\ Argument
A Single Argument

上記の例では、スペースはエスケープされているため、echoコマンドは単一の引数のみを受け取ります。Xonshはこれを許可しません。あなたがxonshでこれを試していたら、あなたは見ています:

xonsh

$ echo Actually\ Three\ Arguments
Actually\ Three\ Arguments

この例では、エコーは3つの引数を:: recives "Actually\\""Three\\""Arguments"代わりに、xonshでは単一の引数を渡すために引用符を使用する必要があります。

xonshまたはbash

$ echo "A Single Argument"
A Single Argument

引用符を使用することは、間違いなくsh-langで最初に行われたはずのことです。

注意

サブプロセスモードで疑義がある場合は、引用符を使用してください。

正当化

sh-langsのように、追加のエスケープシーケンスを持たない理由は次のとおりです。

  1. エスケープキャラクターは、過酷で醜い、速く得ることができます。
  2. エスケープ文字があり、引用符と呼ばれています:)
  3. サブプロセスモードでは、マクロを介してリテラル入力があります。

この最後の点では、Subprocess Macrosについてまだわからない場合は 、an !続くすべての入力を単一の引数として扱うことができます。例えば、

xonsh

$ echo! A  Single     Argument
A  Single     Argument

サブプロセスマクロは、究極のエスケープメカニズムです。

クォートステイ

sh-langsでは、内部引用符文字は削除されます。例えば:

$ echo foo"bar"baz
foobarbaz

$ echo --key="value"
--key=value

Xonshはこの動作を狂気とみなします。代わりに、xonshはこれらの引数を別の外部レベルのquotation('foo"bar"baz'で囲まれているかのように扱いますXonshは先頭と末尾の引用符が一致しないときは引用符を保持します。

xonsh

$ echo foo"bar"baz
foo"bar"baz

$ echo --key="value"
--key="value"

これらはあなたと同等であると考えることができます。

xonsh

$ echo 'foo"bar"baz'
foo"bar"baz

$ echo '--key="value"'
--key="value"

これは、伝統的なシェルからのxonshの出発のもう一つの大きなポイントです。ただし、xonshサブプロセスの文字列処理は一貫性があり予測可能です。

さらなる読書

偉大な文字列の議論の詳細については、お気軽に読んでコメントしてください: