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)