이 질문은이전에 질문함 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 histverify
Enter 키를 누른 후 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.