쉘 확장을 인쇄 할 수 있습니까?


18

사용자가 입력 한 명령을 셸에서 확장하는 특정 규칙 집합이 있다는 것을 알고 있습니다. (bash 쉘에 대해 이야기합시다.)

쉘 확장 후 양식으로 명령을 인쇄 할 수 있습니까? 쉘이 특수 문자를 확장하는 방법을 배우고 확인하는 것이 좋은 유틸리티 인 것 같습니다.

예 :

$ echo *

{all the filenames in current dir}

다음 명령 줄인 확장 된 명령을 인쇄하고 싶습니다.

echo {all the filenames in .}

답변:


13

그냥 사용 echo... 확장 할 명령 앞에 넣어. 나는 이것을 아주 자주 사용합니다.

$ ls
one.txt
two.txt
three.dat
$ echo rm *.txt
rm one.txt two.txt
$ rm *.txt

당신은 사용할 수 있습니다 HomeDel신속하게 앞을 추가 / 제거 할 수 echo.

편집
바와 같이 지적 합니다 (이 경우 같은 명령이 단순한 명령이없는 경우 의견이 작동하지 않습니다 for루프, 파이프를 사용 |하거나, &&또는 그런 다른 것).


1
스크립트를 테스트 할 때이 작업을 수행합니다
Barmar

이것은 여전히 ​​다른 쉘 토큰의 영향을받지만 echo cat * | someprogram이 답변에서 생각한 것을하지 않습니다.
Kroltan

13

사용할 수 있습니다 set -x.

예를 들어, 스크립트를 고려하십시오.

$ cat script.sh
set -x
echo *

실행될 때 echo실제로 실행하기 전에 확장 명령문을 표시 합니다.

$ bash script.sh
+ echo file1 file2 file3 script.sh
file1 file2 file3 script.sh

Kundor가 지적했듯이 이것은 명령 줄 에서도 대화식 으로 작동 합니다.

$ set -x
+ set -x
$ echo *
+ echo file1 file2 file3 script.sh
file1 file2 file3 script.sh

선적 서류 비치

man bashset -x다음과 같은 기능을 설명 합니다.

각 간단한 명령 (명령, 대소 문자 명령, 선택 명령 또는 명령의 산술)을 확장 한 후 PS4의 확장 된 값을 표시 한 다음 명령과 해당 확장 인수 또는 관련 단어 목록을 표시합니다.

기본값은 대한 PS4A, 위에 표시 플러스 공백 기호로입니다.


2
그리고 그것은 대화식 쉘에서도 잘 작동합니다 (OP가 찾고 있다고 생각합니다)
Nick Matteo

7

대화식 쉘의 경우, glob 패턴을 입력 Ctrl+x*후를 누르면 해당 glob 패턴이 확장 된 명령 행이 편집됩니다. bash 매뉴얼 페이지에서 :

glob-expand-word ( C-x *)

포인트 이전의 단어는 경로 이름 확장을위한 패턴으로 취급되며 일치하는 파일 이름 목록이 삽입되어 단어를 대체합니다. 숫자 인수가 제공되면 경로 이름 확장 전에 별표가 추가됩니다.

glob-list-expansions ( Ctrl+x, g)에 관심이있을 수도 있습니다 .


Mac OS에서 bash를 사용하고 있습니다. ctrl + x, command + x를 시도했습니다. 명령 줄 편집이 있는지 확실하지 않습니다. 더 자세히 설명해 주시겠습니까?
Weishi Zeng

@WeishiZeng 왜 그것이 당신을 위해 작동하지 않는지 모르겠습니다. Ctrl+x, *입력 한 직후 echo *와 Enter 키를 누르기 전에을 누르셨습니까 ? 그래도 작동하지 않으면 ~/.inputrcglob-expand-word를 수정 하여 다른 것으로 바인딩 할 수 있습니다.
jamesdlin

contrl + x는 커서를 에코 단어로 이동하지만 아무 것도 편집하지 않습니다. "Ctrl + x "는 무엇을 의미합니까? (Ctrl + x 또는 ctrl + ??) *는 Shift에 있으므로 Shift 를 눌러 *를 가져와야합니까?
Weishi Zeng

을 누른 Ctrl+x다음을 누릅니다 Shift+8. 다음과 같은 경우 seing 시도 할 수 Ctrl+x, g앞서 말했듯의에서 자신의 키 할당, 작업, 또는 .inputrc파일을.
jamesdlin

1

인수가 확장되거나 토큰 화되는 방법을 보려면 인수를 인쇄하는 프로그램이나 스크립트를 사용할 수 있습니다. 구현은 다음과 같습니다 bash.

#!/bin/bash

for (( i = 0; i <= $#; ++i )); do
    printf 'argv[%d] = %s\n' $i "${!i}"
done

파일을 파일에 넣고 printargs.sh실행 가능하게 한다고 가정하면 다음과 같이 출력됩니다.

$ ./printargs.sh a{1..3}b
argv[0] = ./printargs.sh
argv[1] = a1b
argv[2] = a2b
argv[3] = a3b
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.