명령줄 편집 시 셸 변수 확장

명령줄 편집 시 셸 변수 확장

ls bla.*프롬프트에 글을 쓰고 커서가 여전히 =명령줄 섹션에 있는 동안 키를 누르면 bla.*일치하는 파일 목록이 인쇄됩니다. bla.*을 누르면 *해당 단어가 목록을 대체합니다.

쉘 글롭 패턴 대신 변수를 인용하면 비슷한 상황이 가능합니까?

즉, $THISVARIABLE명령줄에 some_key커서가 열려 있는 동안 값을 누르면 값이 인쇄되거나 값이 바뀌는 것을 찾고 있습니다.$THISVARIABLEanother_key

내 .set editing-mode vi~/.inputrc

답변1

쉘이 Emacs 편집 모드에 있는 경우 + (내 시스템에서는 )를 shell-expand-line눌러 Readline 기능을 호출 할 수 있습니다.MetaCtrl+eMetaEscbash

삽화:

$ echo $PATH

Meta지금 +를 누르면 Ctrl+e쉘은 전체 라인을 다음으로 대체합니다.

$ echo /usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin

이는 또한 명령 대체를 확장하므로 확장에 필요한 명령줄의 일부가 실행될 수 있습니다. 이는 또한 완료되지 않은 작업으로 인해 $(구문 오류가 발생할 수 있음을 의미합니다.

이는 쉘 글로빙 패턴을 확장하지 않습니다.

Vi 편집 모드에서 사용하고 싶다면shell-expand-line, 기본적으로 바인딩되지 않으므로 함수를 키 시퀀스에 명시적으로 바인딩 해야 합니다 . 예를 들어, 에 바인딩하려면 다음을 Ctrl+e사용하세요.

bind '"\C-e": shell-expand-line'

EscVi 모드에는 특별한 기능이 있기 때문에 Emacs 모드와 동일한 키 시퀀스를 사용하는 데에는 분명히 문제가 있습니다 .

관련 정보