이전에 입력한 매개변수를 참조하는 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. 매직 스페이스를 활성화한 경우 스페이스를 입력 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.

관련 정보