チュートリアル:サブプロセス文字列¶
xonshの文字列は、次の2つの単純な規則に従います。
- xonshの文字列は常に同じ方法で解析されます。
- 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のように、追加のエスケープシーケンスを持たない理由は次のとおりです。
- エスケープキャラクターは、過酷で醜い、速く得ることができます。
- エスケープ文字があり、引用符と呼ばれています:)
- サブプロセスモードでは、マクロを介してリテラル入力があります。
この最後の点では、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サブプロセスの文字列処理は一貫性があり予測可能です。