コマンドの使用法は何quote
ですか?私はそれに関する情報を見つけていません、それは/bin
フォルダー内の実行可能ファイルの中にありません、そしてそれはBashビルトインの中に見つけることができません。echo
コマンドのように、最初のパラメーターのみを出力するようです。
quote
このようなあいまいな目的に使用される、WTFのような一般的な単語を持っているように感じます。これは少し気がかりです。
コマンドの使用法は何quote
ですか?私はそれに関する情報を見つけていません、それは/bin
フォルダー内の実行可能ファイルの中にありません、そしてそれはBashビルトインの中に見つけることができません。echo
コマンドのように、最初のパラメーターのみを出力するようです。
quote
このようなあいまいな目的に使用される、WTFのような一般的な単語を持っているように感じます。これは少し気がかりです。
回答:
私はこのコマンドが私のシェル(fish、friendly interactive shell)では機能しないことに気付きました。bash(Ubuntuのデフォルト)でのみ動作するようです。
chocobai@pc ~> /bin/bash
chocobai@pc:~$ quote asdf
'asdf'chocobai@pc:~$
chocobai@pc:~$ type quote
quote is a function.
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
引用符は追加しますが、改行は追加しません。また、bashに適した方法で単一引用符をエスケープします。スクリプトでは、変数または他の種類の文字列を引用するのに役立ちます。これは、たとえばスペースを含むパス/パラメーターに必要です。これを行う方法は他にもありますが。
(Webで)それに関するドキュメントを見つけることができなかったのは本当に奇妙です。しかし、まあ、それが何をするかは簡単にわかります。
which
対話型シェルでもスクリプトでも役に立たない。type
代わりに使用してください。type quote
関数であることがわかり、関数定義も表示されます。ビルトインhelp type
でさらに実行しますtype
。
/etc/bash_completion
され~/.bashrc
ています。これは、デフォルトでソースになっています/etc/bash.bashrc
。関連するセクション/etc/bash_completion
がコメントアウトされている場所ではありません。また、/usr/share/bash-completion/
フォルダーはUbuntu 12.04にありません。
quote
は、ファイル内/usr/share/bash-completion/bash_completion
で定義されている関数です(ここでは私のDebianシステム上ですが、Ubuntu上でも同じだと思います)/etc/bash.bashrc
。
私はこの機能を決して使用しません!シェルで安全に使用できるように引用する必要がある場合printf
は、%q
修飾子とともに次のように使用してください。
printf '%q\n' "Hello my friend I like 'single quotes' as well as \"double quotes\""
実際、これは非常にまれにしか使用されませんが、私たちユーザーが通常行うように、常に高レベルのもののためのより良い戦略があります。このquote
ことは、私たちが知りたくない不明瞭なものによって内部的に使用されます。このquote
関数はおそらくベンダー/ディストリビューション固有のもので(Debian固有のものを読んでください)、おそらくまったく移植性がなく、将来のリリースでも変更される可能性があります。
編集。Ubuntu 12.04システムで確認したところ、quote
関数はで定義され/etc/bash_completion
、ソースが/etc/bash.bashrc
、それ自体がソース/etc/profile
です。
これをどのように決定しましたか?少しヒューリスティックを使用して:
にquote
表示されるかどうかを確認します/etc/profile
:
grep '\bquote\b' /etc/profile
いいえ。次のステップに進みます。
提供元のファイルは何/etc/profile
ですか?
grep '[[:space:]]\.[[:space:]]' /etc/profile
私が持っている$i
(何このソースのソースを検討する必要性が、しかしこの場合は、ファイルだ/etc/profile.d/*.sh
があれば(と読める場合)/etc/bash.bashrc
。で見ます/etc/bash.bashrc
。
quote
に/etc/bash.bashrc
?yes / noなどquote
実際に単一引用符をエスケープするため、シェルで使用できます。それはちょうど同様に動作しますprintf %q
。このユースケースのために。
my_str='~/.bashrc'; echo ' Expected:' "$my_str"; bash -c "echo ' quote:' $(quote "$my_str")"; bash -c "echo 'printf %q:' $(printf '%q\n' "$my_str")"
。あなたのようなものを見るだろうExpected: ~/.bashrc
、quote: ~/.bashrc
とprintf %q: /home/your_username/.bashrc
。
(shopt -s extdebug; declare -F quote)
、を使用して、関数名、定義されている行番号、定義されているファイル名を確認できます
quote
関数です:
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
この関数は、bash初期化ファイルのどこかに定義されています。より正確には、Ubuntu 13.04を使用している場合/usr/share/bash-completion/bash_completion
、142行目で見つけることができます。
次のコマンドを使用して確認します。
type quote
その目的は明らかに明らかです。
$INPUT
スペース、引用符、または他の文字を含む可能性のある変数を取得し、bashによって単一の引数としてのみ扱われる文字列を返すために使用されます。