bash의 이전 명령에서 특정 인수를 얻는 방법은 무엇입니까?


31

bash에서는 !*이전 명령에서 모든 인수를 가져 오는 데 사용할 수 있습니다 . 예를 들어, 수행 cp /some/path /some/other/path한 다음 수행 mv !*하면 두 번째 명령이로 확장됩니다 mv /some/path /some/other/path.

명령 대신 특정 인수에 액세스하는 데 사용할 수있는 이와 같은 것이 있습니까?

답변:


38

에서은 !*, !은 IS 역사 확장 접두사와 *는 IS 단어 지정자 그 수단 모든 인수. 일반 구문을 bang-line-colon-column ( !:열) 으로 기억할 수 있습니다 . 가능한 단축키는 여러 가지가 있습니다. 기본 행은 이전 행이고 기본 열 지정자는 "all"이며 열 지정자가 숫자가 아닌 경우 콜론을 생략 할 수 있습니다 ( !33 행). 당신이 사용할 수있는 !:0명령 이름을 참조, !:1, !:2, 등, 연속적인 인수를 참조하는 !:$, 마지막 단어에 대한 !:*모든 인수를 위해, 그리고 더.

Michael MrozekUnix Stack Exchange 게시물 도 참조하십시오 .


1
나는 그것을 직접 시도했지만 이것이 효과가 없었다. Michale Mrozek에 의해 게시물을보고 한 후, 사용에 말했다 !:1, !:2. 콜론과 함께 버전을 사용한 후 작동했습니다.
Wuffers

@MrMan : 죄송합니다. 콜론에서 숫자를 빼면 숫자가 줄 번호로 해석됩니다. 미안합니다.
Gilles 'SO- 악마

문제 없어. 그렇다면 나는 !1:1행이 첫 번째 줄의 첫 번째 주장을 가리킬 것이라고 생각 합니까?
Wuffers

4

개인적으로, 나는 echo "Hello World!"대화식 쉘에서 시도해도 방해가되는이“느낌표가있는 확장”기능을 정말로 좋아하지 않습니다 (비 대화식 모드에서 실행될 것이라고 가정하는 소싱 스크립트는 전혀 작동하지 않습니다).

그래서 나는 set +o histexpand다음과 같은 방법으로 인수를 호출하고 시작합니다.

Esc, 1, Esc, Ctrl-Y => Insert first argument of previous command.

Esc-trick은 메타 키가 없기 때문에 발생합니다.


나는 명령에 느낌표를 거의 사용하지 않습니다. 느낌표 방법은 저에게 완벽하게 작동합니다.
Wuffers

그럼 즐기세요. 쉘의 수많은 기능 중 일부는 소수의 사용자만을 위해 설계되었습니다.
Benoit

실제로 느낌표를 피할 필요는 없습니다. 마십시오 echo 'Hello, orld!'. 큰 따옴표 대신 작은 따옴표를 유의하십시오.
Wuffers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.