이전에 입력한 인수를 참조하는 bash 마법이 있습니까? [복사]

이전에 입력한 인수를 참조하는 bash 마법이 있습니까? [복사]

이 질문은이전에 질문함 bash 콘솔에서 현재 입력된 매개변수를 어떻게 반복합니까?


쉘에서 파일 이름을 약간 바꾸고 싶은 경우가 많습니다. 예를 들면 다음과 같습니다.

$ mv test_1.py _test_1.py

또는

$ mv test_1.py test_1.py.org

다음의 제안을 사용할 수 있습니다.bash 콘솔에서 현재 입력된 매개변수를 어떻게 반복합니까?, 하지만

당신은 가지고 있습니까?배쉬 매직이렇게 하면 이전에 입력한 매개변수만 참조할 수 있습니까?

예를 들어, $M,위의 경우 마술이 있다면 다음을 사용합니다.

$ mv test_1.py _$M.py
$ mv test_1.py $M.org

답변1

마법은 두 부분으로 나누어진다.

첫째, echo는 e에 대한 별칭입니다(별명이 필요하지 않은 경우 echo가 작동합니다). 두 번째로 "분기 확장"을 사용합니다.

$ e mv {,_}test_1.py              # Try to see if it works as expected.
mv test_1.py _test_1.py

          # If the arguments are what you want:

$ mv {,_}test_1.py                # Press ↑ (up arrow), remove `e`

$ !*                              # OR: Type `!*` --> last line after arg 0.
$ mv {,_}test_1.py                # If `histverify` is set.

!*는 공백으로 확장할 수 있습니다.마법의 공간 활성화아니면 당신이놓다shopt -s histverifyEnter 키를 누른 후 Enter 키를 눌러 다시 실행하기 전에 역사적 확장의 효과를 볼 수 있는 기회를 갖게 됩니다.

다른 예시:

$ e mv test_1.py{,.org}
mv test_1.py test_1.py.org        # The result of the brace expansion.
                                  # Review it, and if it is ok:
$ !*                              # type !* (use either space or enter)
                                  # That will depend on how you setup it.

$ mv test_1.py{,.org}        # The command appear again (enter to execute).
$

히스토리 확장도 있는데, !#이는 지금까지 입력한 명령줄을 의미하며 첫 번째 명령이 선택됩니다 :1. Magic-Space가 활성화된 경우 mv test1.py !#:1스페이스바를 입력하고 누르면 명령이 변경됩니다.

$ mv test_1.py !#:1                # Press space.
$ mv test_1.py test_1.py           # The command line change to this.
$ mv test_1.py test_1.org          # Edit and press enter to execute.

관련 정보