~ のような特別なパス プレフィックスはありますか? 実行可能なベース名のみが提供されている場合、これがデフォルトの動作であることはわかっていますが、a=b のような派手な実行可能名を使用すると、./a=b のようにフルパスまたは相対パスでのみ呼び出すことができます。basename a=b だけを指定すると、bash はそれを変数割り当てとして解釈します。
4 に答える
これは正確には接頭辞ではありませんが、実行可能ファイル名を ( のように) 引用する'a=b'
と、PATH でそれが見つかります。(バッシュ 3.2.17)
そのようなプレフィックスはありません。「奇妙な」文字を含むファイル名を実行することが唯一の目的である場合は、必要ありません。これらの文字を引用するだけ'a=b'
ですa\=b
。次に、bash の解析と展開により、コマンドの最初の単語が になりますa=b
。これは、他のコマンド名と同様にパスで検索されます。
パス内のプログラムを検索して実行したくない場合は、 を使用しますcommand -v
。(同じ効果を持つ他のビルトインがあり、command -v
移植可能であるという利点があります(bashビルトインであり、POSIXにあります)。使用しないでください。which
これは外部コマンドであり、信頼性が低く、移植性がありません。)
を含むパス内のすべてのディレクトリを検索する場合はa=b
、 を使用できますtype -a
。
type -aP a=b
command
ビルトインはまさにこの目的のために設計されています。つまり、コマンド (エイリアスでも関数でもない) を探します。
command a=b
トリックを行う必要があります。bash マニュアルから:
command [-pVv] command [arg ...] Run command with args suppressing the normal shell function lookup. Only builtin commands or commands found in the PATH are executed. If the -p option is given, the search for command is performed using a default value for PATH that is guaranteed to find all of the standard utilities. If either the -V or -v option is supplied, a description of command is printed. The -v option causes a single word indicating the command or file name used to invoke command to be displayed; the -V option produces a more ver‐ bose description. If the -V or -v option is supplied, the exit status is 0 if command was found, and 1 if not. If neither option is supplied and an error occurred or command cannot be found, the exit status is 127. Otherwise, the exit status of the command builtin is the exit status of command.
個人的には引用符を使用しますが、別の可能性は次のとおりです。
(exec a=b)