왜 이것이 작동하지 않는지 궁금합니다.
#!/bin/bash
ls /bin
ls !$
두 번 실행할 것으로 예상했지만 ls /bin
두 번째에는 !$
해석되지 않아 오류가 발생합니다.
뭔가 빠졌나요? 아니면 !$
명령줄에서만 작동하나요?
man bash
(Mac에서) 관련 부분을 찾을 수 없습니다
답변1
답변2
하는 것이 현명할 것이다
ls /bin
ls $_
또는
set ls /bin
$*
$*
또는
c='ls /bin'
$c
$c
주의 사항: 각 방법에는 몇 가지 함정이 있다는 점을 기억할 가치가 있습니다. $_ 솔루션은 마지막 매개변수만 캡처합니다. 따라서 ls foo bar
$_에는 bar
.사용된 매개변수만 포함 set
되어 매개변수( 등)가 재정의 $1
됩니다 $2
. 이 작성은 모두 작동하지만 이스케이프 및 공백이 중요한 더 복잡한 명령으로 일반화할 때 약간의 어려움에 직면할 수 있습니다. 예를 들면 다음과 같습니다. ( ls 'foo bar'
단일 경로 이름 인수에는 다음이 foo bar
포함됩니다 .둘이상의 공백 또는 기타 공백 문자)는 두 예 모두에서 올바르게 실행되지 않습니다. 이러한 상황을 해결하려면 적절한 이스케이프(아마도 eval
명령과 함께) 또는 "$@"
대체가 필요할 수 있습니다 $*
.