shopt
Zshで代わりに使用しようとしているときに思い出させるために、setopt
次のエイリアスを作成し、まずシェルプロンプトでテストしました。
$ alias shopt='echo "You\'re looking for setopt. This is Z shell, man, not Bash."'
外部一重引用符が内部二重引用符と一致し、アポストロフィがエスケープされていますが、次を使用して閉じる引用符を完成するように求められます。
dquote > _
どうなりますか?
エスケープが無視されているか、複数のレイヤーの解釈のためにデュアルエスケープが必要なようです...だから、この理論をテストするために、次のようにデュアルエスケープ(およびトリプルエスケープなど)を試しました。
alias shopt='echo "You\\\\\\\\\\\\\\\\\\\\\\'re looking for setopt. This is Z shell, man, not Bash." '
そしていいえ他の動作を確認してください。これは私には理解できません。どのような奇妙な魔法がシェルが私が期待したように動作するのを防ぎますか?
実際の解決策は、echo
実際には何も必要としないため、引用符を使用せずに二重引用符を使用し、テキストを編集するときに無視されるalias
ようにアポストロフィをエスケープすることです。echo
それではみんな実際問題は消えます。
助けてください?この混乱した問題を解決する必要があります。
ベストアンサー1
これでzsh
はないfish
。
zsh
(とで)csh
すべてのBourneのようなシェルのように一重引用符は、エスケープのない強い引用符です。(rcquotes
以下のオプションを使用しない限り@JdeBP ヒント引用符1)をzsh
シミュレートしますrc
。一重引用符で囲まれた文字列の中に一重引用符を使用することはできません。まず、一重引用符で囲まれた文字列を閉じ、別の引用メカニズム(\
または)を使用して"
リテラル一重引用符を入力する必要があります。
alias shopt='echo "You'\''re looking for setopt. This is Z shell, man, not Bash."'
または:
alias shopt='echo "You'"'"'re looking for setopt. This is Z shell, man, not Bash."'
次のようにすることもできます。
alias shopt="echo \"You're looking for setopt. This is Z shell, man, not Bash.\""
("..."
はい弱い\
(ここでは埋め込み文字をエスケープするために使用されます)を含む引用符の中のいくつかの文字は"
まだ特別です。
または:
alias shopt=$'echo "You\'re looking for setopt. This is Z shell, man, not Bash."'
(エスケープできる$'...'
ksh93への別の参照)'
\'
(BTW、in.のset -o
代わりに標準を使用することもできます。歴史的な理由から、2つのオプションセットがあります。1つは設定用です。他のほとんどのシェルと同様に、オプションセットは1つだけです。setopt
zsh
bash
set -o
shopt
zsh
1 `rc`では、Plan9シェルにはUnixに似たバージョンもあります。 [一重引用符が唯一の引用メカニズムです](/a/296147)(バックスラッシュと二重引用符は一般的な文字です)、唯一の方法はEnter literal Singleです。 rcquotes"を使用すると、次のようにできます。
alias shopt = 'echo "setoptを探しています。これはBashではなくZシェルです。"'