echo (ls)
Bashで実行すると、次のものが返されます。
-bash: syntax error near unexpected token `ls'
プレーンテキスト出力を取得するには、角かっこまたは引用符をエスケープする必要があることを知っています。しかし、角括弧がサブシェル環境で一連のコマンドを実行するという意味であれば、結果はまだ理解されていません。
私の環境:bash 4.3(homebrew経由でインストール)、OS X El Capitan
答え1
ls
これは本質的にトークンに特に関連しない一般的な構文エラーです。bash
yaccパーサーを使用して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.
追加資料:
- 3.2.4.3 グループ化コマンド(Bashリファレンスマニュアル)
- 3.5.4 コマンドの置換(Bashリファレンスマニュアル)
答え2
ls
バックティックの中にあるか、次のように試してください。
echo $(ls)