0

最初の問題:

コマンドライン引数を受け取ってファイルに出力する簡単なプログラムを書いたとします。ユーザーが入力した場合

writetofile Hello!0\nw%orl\t!@#y

bash は次のように応答します

!0: イベントが見つかりません。

ユーザーが引用符 ('') やエスケープ文字 ('\') を使用するなどのことを知らなくても、bash がコマンドとして理解するのではなく、どのように処理すればよいでしょうか?

2番目の問題:

これらの引数を取得したら、それらを一連の文字ではなく特殊文字として解釈するにはどうすればよいでしょうか。(つまり、\t は '\''t' ではなくタブです)

つまり、プログラムがこれをファイルに書き込むようにする方法は次のとおりです。

Hello!0
 w%orl    !@#y

ではない

Hello!0\n w%orl\t!@#y
4

3 に答える 3

2

コマンドラインとしてのコマンドラインの解析を停止するbashを取得することはできません。特定のケースでは、履歴拡張を無効にして、リテラルとして!0を許可しますが、、、、、およびシェル構文の他の12個の要素を含めるset +Hと、コマンドは失敗し(parenthesis)ます$variables#commentsampersand &

これはシェルの解析段階にのみ適用され、文字通りに渡されるデータなどには適用されないことに注意してくださいexecve

ユーザーにデータを引用させる('single quotes'他の単一引用符を除くすべてを処理する)か、プログラムにデータ自体を読み取らせて、対話が行われるようにします

$ writetofile
Please enter your gibberish and press enter: Hello!0\n w%orl\t!@#y
Thank you for your eloquent contribution.
$
于 2013-02-17T18:12:15.590 に答える
1

最初の問題: 一重引用符を使用します。例: writetofile 'Hello!0\nw%orl\t!@#y'

2 番目の問題: printf を使用します。

于 2013-02-17T15:43:06.030 に答える