bashの「echo(ls)」は何をしますか?

bashの「echo(ls)」は何をしますか?

echo (ls)Bashで実行すると、次のものが返されます。

-bash: syntax error near unexpected token `ls'

プレーンテキスト出力を取得するには、角かっこまたは引用符をエスケープする必要があることを知っています。しかし、角括弧がサブシェル環境で一連のコマンドを実行するという意味であれば、結果はまだ理解されていません。

私の環境:bash 4.3(homebrew経由でインストール)、OS X El Capitan

ベストアンサー1

lsこれは本質的にトークンに特に関連しない一般的な構文エラーです。bashyaccパーサーを使用してyyerror()すべての問題に対して通常のパーサーを呼び出し、結果のエラー処理でエラーを正確に見つけようとし続けます。メッセージはこのブロックから来ます(参照:源泉):

  /* If the line of input we're reading is not null, try to find the       
     objectionable token.  First, try to figure out what token the
     parser's complaining about by looking at current_token. */
  if (current_token != 0 && EOF_Reached == 0 && (msg = error_token_from_token (current_token)))
    {
      if (ansic_shouldquote (msg))
    {
      p = ansic_quote (msg, 0, NULL);
      free (msg);
      msg = p;
    }
      parser_error (line_number, _("syntax error near unexpected token `%s'"), msg);
      free (msg);

      if (interactive == 0)
    print_offending_line ();

      last_command_exit_value = parse_and_execute_level ? EX_BADSYNTAX : EX_BADUSAGE;
      return;
    }

つまり、難読化されてプレビュー'('コンテキストが報告されますls

A は(コマンドの先頭には有効ですが含まれません。マニュアルページによると:

   Compound Commands                                                       
       A compound command is one of the following:

       (list) list  is  executed in a subshell environment (see COMMAND EXECU‐
              TION ENVIRONMENT below).  Variable assignments and builtin  com‐
              mands  that  affect  the  shell's  environment  do not remain in
              effect after the command completes.  The return  status  is  the
              exit status of list.

追加資料:

おすすめ記事