왜$

왜$
root@raspberrypi:~# cat >test
echo succeed
root@raspberrypi:~# <test
root@raspberrypi:~# `<test`
succeed

원인은 신호 손실인 것 같습니다. 그런데 enter어떻게 보내지?enter

답변1

Bash 및 기타 일부 쉘에서는 `<test`다음과 같은 약어입니다.`cat test`:

명령 대체는 $(cat file)동일하지만 더 빠른 명령을 대체할 수 있습니다 $(< file.

(-style 명령 대체도 마찬가지입니다 `...`).

이것은 당신의 명령을 의미합니다

$ `<test`

동일합니까?

$ `cat test`

- 즉, test명령 대체 표현식 대신 파일의 내용을 명령줄에 삽입한 다음 명령의 시작 부분에 있으므로,첫 번째 단어를 명령 이름 실행 결과로 사용.


반면에,

$ <test

표준 입력이 test파일에서 리디렉션되는 빈 명령일 뿐입니다.POSIX와 유사한 쉘에서. 본질적으로 : <test아무것도 하지 않고 성공하는 것과 같습니다 . 별로 유용하진 않지만,~ 할 것이다test존재하지 않거나 읽을 수 없으면 오류가 발생합니다.

>test생성하거나 자르는 반대 방향이 test유용할 때도 있습니다.


`<test`Bash, zsh, ksh 등의 특수한 무력화 동작은 $(<test)명령 대체가 일반적으로 동일한 명령의 일반적인 동작을 복제하는 방식과 일치하지 않습니다. 이는 다음과 같은 명령에 대한 편의성 및 성능 기능입니다.

printf '%s@%s\n' $(<username.txt) $(<host.txt)

파일 내용을 명령줄로 읽고 추가 프로세스를 저장하려고 합니다(생성하지 않고 cat쉘 자체가 파일을 읽도록 함으로써).

차이점은 그것이나 그런 것과는 아무 관련이 없습니다 Enter. 단지 특별한 경우일 뿐입니다. 나는 당신이 하고 있는 일을 명시하는 대신에 :use나 비슷한 방법을 사용 $(<file)하여 파일을 실행하는 것을 권장하지 않습니다 . 사용을 권장하지도 않습니다..sourceeval$(<file) 별말씀을요긴밀한 루프에 있다고 확신하지 않는 한 추가 cat프로세스를 생성하는 것이 중요합니다. 여기서처럼 사람들이 혼란스러워할 수 있기 때문입니다. 이는 그리 자주 발생하는 일이 아닙니다.

관련 정보