私の知る限り、[[
はの拡張バージョンです[
が[[
、キーワード[
として表示され、組み込みとして表示されると混乱します。
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
TLDPは言う
ビルトインは同じ名前のシステムコマンドの同義語である場合がありますが、Bashは内部的に再実装します。たとえば、Bashのechoコマンドは/ bin / echoと同じではありませんが、動作はほとんど同じです。
そして
キーワードは、予約語、トークン、または演算子です。キーワードはシェルにとって特別な意味を持ち、実際、シェルの構文の構成要素です。例として、for、while、do、および!キーワードです。ビルトインと同様に、キーワードはBashにハードコーディングされますが、ビルトインとは異なり、キーワードはそれ自体がコマンドではなく、コマンド構成のサブユニットです。[2]
それは両方[
と[[
キーワードを作るべきではありませんか?ここに欠けているものはありますか?また、このリンクの両方のことを再断言[
とは[[
同じ種類に属している必要があります。
if "[" $x -eq 3 ]
期待どおりに動作します(Bashはと呼ばれるコマンドを探し[
、これが存在するため)がif "[[" $x -eq 3 ]]
動作しません(再びBashは適切な名前のコマンドを検索しますが、[[
コマンド)。
/usr/bin/echo
、それは組み込みではないという意味ではありません。