5

次のコマンドを実行しようとしています。

replace -x "must " A2input.txt
replace -x " a" -f -s ## A2input.txt
replace -x to -s ## -a A2input.txt
replace -x faith -f "unequivocal" A2input.txt

そして、「a」、「b」、「c」、「d」などの短くて単純なものにエイリアスできればいいのですが...

ただし、これらの引数の一部には引用符があり、エイリアスが台無しになっています。二重引用符を実際にエスケープする方法を知っている人はいますか? '\"' や \" などを試しましたが、何も機能しないようです。

シェルとして tcsh を使用しています。

4

5 に答える 5

7

以下はすべて、tcshさまざまな結果を達成するために機能します。

alias t echo hello world # 実際には引用符は必要ないかもしれません
alias u 'echo "hello world"' # 異なるタイプのネストされた引用符
alias v echo\ \"hello\ world\" # すべてをエスケープ
alias w echo '\;'hello'";"' world # 引用/エスケープ問題領域のみ
alias x 'echo \"hello world\"' # 一重引用符とリテラルのエスケープ "
alias y "echo "\""hello world"\" # unquote, escaped quote, quote ("\"")
alias z 'echo '\''hello world'\' # 一重引用符 ('\'') も同様

これらがシェルによってどのように解釈されるかを確認するには、alias引数なしで実行します。

% エイリアス
t (エコー ハロー ワールド)
あなたは「こんにちは世界」をエコー
v echo "ハローワールド"
w (echo \;hello";" world)
x echo \"ハローワールド\"
y エコー「ハローワールド」
z echo 'ハローワールド'

括弧内はすべてサブシェルで実行されます。環境変数を設定しようとしている場合、これは悪いことですが、それ以外の場合はほとんど無関係です。

最後に、例が実際に行うことは次のとおりです。

%t; あなた; v; w; バツ; y; z
こんにちは世界
こんにちは世界
こんにちは世界
;こんにちは; 世界
"こんにちは世界"
こんにちは世界
こんにちは世界
于 2014-03-04T04:12:59.100 に答える
6

二重引用符を含む文字列を変数に格納し、文字列を一重引用符で囲んで動作させました。変数を使用するときは、一重引用符で囲みます。
例:

[11:~]ファイ%
[11:~] phi% set text = 'a quote "'
[11:~] phi% alias ec echo '$text'
[11:~] ファイ% ec
見積もり "
[11:~]ファイ%
[11:~] phi% alias ec echo this has '$text'
[11:~] ファイ% ec
これには引用符があります」
[11:~]ファイ%

OSXのtcshでこれをテストしました

于 2008-12-20T02:00:11.937 に答える
3

tcshには新しい変数がありますbackslash_quote。いつ追加されたかは不明ですが、6.18.01(OS X El Capitan のバージョン) および6.19(執筆時点での最新の安定版リリース) でサポートされています。これにより、引用符内の'"、およびをエスケープできます。`

set backslash_quote

set sentence = 'I\'m a little teapot.'
set sentence2 = "The man said \"hello\""

このオプションを使用したくない場合は、シンボルを別の種類の引用符で囲むことに選択肢が制限されます

"The man said "'"'"hello"'"'

または、引用符をまったく使用せず、自由にバックスラッシュを使用します。

The\ man\ said\ \"hello\"
于 2016-05-18T17:34:34.160 に答える
0

エイリアスが機能しない場合は、短いシェル スクリプト chmod +x を作成し、$PATH ($HOME/bin など) のどこかに配置します。

#!/bin/tcsh
replace -x "must" ...

私は tcsh の経験はありませんが、bash では次のようにします:

alias t='echo "hello  world"'     # using single quotes to enclose entire string
alias t=echo\ \"hello\ \ world\"  # escape " and <space>
alias t="echo \"hello  world\""   # double-quote + escape inner double quotes

たぶん、tcshでも同様のことが機能しますか?

于 2008-12-20T01:53:15.287 に答える