태그 보관물: wildcards

wildcards

쉘 확장을 인쇄 할 수 있습니까? (bash 쉘에 대해

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

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

예 :

$ echo *

{all the filenames in current dir}

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

echo {all the filenames in .}


답변

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

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

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

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


답변

사용할 수 있습니다 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, 위에 표시 플러스 공백 기호로입니다.


답변

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

glob-expand-word ( C-x *)

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

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


답변

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

답변