최근에는 $ 접두사에 echo 명령을 사용했습니다. 놀랍게도 그 결과는 오류였습니다. 내 명령은 다음과 같습니다.
# !/bin/bash $(echo "a")
오류는 ..
./test1.sh: line 3: a: command not found
누구든지 여기서 무슨 일이 일어나고 있는지 설명 할 수 있습니까? 미리 감사드립니다.
Answer
$(echo a)
는 “명령 대체”입니다. $(...)
는 내 명령의 출력 으로 대체됩니다. 이 경우 출력은 a
이며 쉘이 실행을 시도합니다. 셸이 a
라는 명령을 찾을 수없고 오류 메시지가 표시됩니다.
이 작업의 의도가 무엇인지 또는 예상 한 결과가 명확하지 않습니다. . 명령 대체 결과를 실행하는 것은 매우 드문 입니다.
일부 프로그램은 쉘에서 평가해야하는 문자열을 출력합니다. 따라서 가능합니다. 주어진 명령의 출력을 평가 (실행)하는
eval "$(ssh-agent)"
와 같은 코드를 참조하십시오. 이러한 명령은 엄격하게 지정된 출력을 가지며 일반적으로이 명령에서 실행해도 안전한 것으로 간주됩니다. 위의 예에서 ssh-agent
는 SSH 에이전트 프로세스를 시작하고 ssh
클라이언트는 나중에 에이전트를 사용해야합니다 (예 :
SSH_AUTH_SOCK=/tmp/ssh-Ppg1EO5eRIZp/agent.6017; export SSH_AUTH_SOCK; SSH_AGENT_PID=6018; export SSH_AGENT_PID; echo Agent pid 6018;
그런 다음 eval
).
eval
는 ssh-agent
명령의 출력은 더 복합적인 명령이므로 $(ssh-agent)
를 사용하면됩니다. eval
가 없으면 ;
명령 종결자는 특별합니다.
예 :
$ s="echo hello; echo world" $ $s hello; echo world $ eval "$s" hello world
댓글
답변
set -x
를 사용하여 셸이 수행하는 작업을 확인합니다.
set -x $(echo "a") ++ echo a + a
셸은 echo a
를 실행하고 명령 줄에 출력을 표시합니다. 이것은 다음 명령 줄을 실행하려고 시도한 것과 동일합니다.
a
셸이 명령을 찾습니다. a
(함수, 별칭 및 해시 목록 이전에도)를 찾지 못해 오류가 발생합니다.
출력이 유효한 명령이면 작동합니다.
$(echo "ls")
댓글
- 실제로 $ other를 사용한 다음 변수를 호출하는 것에 대해 말씀해 주시겠습니까?
- @Ashu 분명히 명령 대체에도 사용됩니다 – 귀하의 경우. 계산 (
echo $((1+2+3))
), 문자열 생성 ($'foo\nbar'
/$"foo"
) 및 (덜 셸 관련)bash
가 이해하는 정규식 ([[ foo =~ ^f..$ ]]
)에서. 또한 여러 가지 방법으로 변수를 수정하는 데 사용됩니다.${foo#bar}
eval "$(dircolors)"
는 합당한 조치입니다. gpg-agent와 같이 해당 패턴을 따르는 여러 다른 명령과 동일합니다.$(ssh-agent)
. 좋은 지적입니다.