본문 바로가기
IT일반/Linux

Command Line - 확장과 인용

by 버섯도리 2022. 5. 9.
[cmd_test@btjeon-naver ~]$ echo /usr/*/share
/usr/local/share
cmd_test@btjeon-naver ~]$ echo [[:lower:]]*
lazy_dog.txt ls-error.txt ls-output.txt ls.txt
[cmd_test@btjeon-naver ~]$ echo ls*
ls-error.txt ls-output.txt ls.txt

echo 명령어와 와일드카드(*)를 통해 디렉토리, 파일명 경로를 탐색할 수 있다.

 

[cmd_test@btjeon-naver ~]$ echo ~
/home/cmd_test
[cmd_test@btjeon-naver ~]$ echo ~root
/root

홈디렉토리 확인

 

[cmd_test@btjeon-naver ~]$ echo $((2 + 2))
4
[cmd_test@btjeon-naver ~]$ echo $(($((5**2)) * 3))
75
[cmd_test@btjeon-naver ~]$ echo $(((5**2) * 3))
75
[cmd_test@btjeon-naver ~]$ echo Five divided by two equals $((5/2))
Five divided by two equals 2
[cmd_test@btjeon-naver ~]$ echo with $((5%2)) left over.
with 1 left over.

echo 명령어를 통해 산술 연산이 가능하다.

 

[cmd_test@btjeon-naver ~]$ echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back
[cmd_test@btjeon-naver ~]$ echo Number-{1..5}
Number-1 Number-2 Number-3 Number-4 Number-5
[cmd_test@btjeon-naver ~]$ echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
[cmd_test@btjeon-naver ~]$ echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b
[cmd_test@btjeon-naver ~]$ 
[cmd_test@btjeon-naver ~]$ 
[cmd_test@btjeon-naver ~]$ mkdir Pics
[cmd_test@btjeon-naver ~]$ cd Pics
[cmd_test@btjeon-naver Pics]$ mkdir {2022..2024}0{1..9} {2022..2024}{10..12}
[cmd_test@btjeon-naver Pics]$ ls
202201  202203  202205  202207  202209  202211  202301  202303  202305  202307  202309  202311  202401  202403  202405  202407  202409  202411
202202  202204  202206  202208  202210  202212  202302  202304  202306  202308  202310  202312  202402  202404  202406  202408  202410  202412

중괄호 안에 표현된 패턴과 일치하는 다양한 텍스트 문자열을 만들 수 있다. 중괄호 표현식은 그 자체가 쉼표로 구분된 문자열을 표현하거나 정수나 문자의 범위를 표현할 수 있다. (또한 이런 패턴에는 빈칸이 허용되지 않는다.)

 

[cmd_test@btjeon-naver ~]$ echo $USER
cmd_test
[cmd_test@btjeon-naver ~]$ printenv | less
[cmd_test@btjeon-naver ~]$ echo $HOSTNAME
btjeon-naver

변수값 확인

 

[cmd_test@btjeon-naver ~]$ echo $(ls)
lazy_dog.txt ls-error.txt ls-output.txt ls.txt Pics
[cmd_test@btjeon-naver ~]$ ls -l $(which cp)
-rwxr-xr-x. 1 root root 155176 Aug 20  2019 /bin/cp
[cmd_test@btjeon-naver ~]$ file $(ls /usr/bin/* | grep zip)
/usr/bin/bunzip2:      symbolic link to `bzip2'
/usr/bin/bzip2:        ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=9587d04997b37141a2dbdbdb9562ca151913a6f4, stripped
/usr/bin/bzip2recover: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=b79d9a281baf0b8f43196bfe406a6d945e792ccb, stripped
/usr/bin/funzip:       ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=15c0808e98adf5995c27c015e6f725d1adc3e3d4, stripped
/usr/bin/gpg-zip:      POSIX shell script, ASCII text executable
/usr/bin/gunzip:       POSIX shell script, ASCII text executable
/usr/bin/gzip:         ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=526d77ff7164870f948d8f97aaf0a888cc561b30, stripped
/usr/bin/unzip:        ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=e7f845f5398bd53a5bc6b732d1c42ae24095209b, stripped
/usr/bin/unzipsfx:     ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=75e78ab9234cf34dd0f57f601ae529800bdab657, stripped
/usr/bin/zip:          ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=7c01940c97abdf45a093c697e63ef214ea14adcf, stripped
/usr/bin/zipcloak:     ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=e0f7de70feffd0124f6350e449b8d6c7513502da, stripped
/usr/bin/zipgrep:      POSIX shell script, ASCII text executable
/usr/bin/zipinfo:      ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=e7f845f5398bd53a5bc6b732d1c42ae24095209b, stripped
/usr/bin/zipnote:      ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=750c11ada0bec740fa2885383e678e7be5206cdd, stripped
/usr/bin/zipsplit:     ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=e259ffcdb17baf5b9599c87ad924eb51b4df53b4, stripped

$ 기호를 통해 명령어 치환하기

 

[cmd_test@btjeon-naver ~]$ ls -l `which cp`
-rwxr-xr-x. 1 root root 155176 Aug 20  2019 /bin/cp

` 사용

 

[cmd_test@btjeon-naver ~]$ ls -l two words.txt
ls: cannot access two: No such file or directory
ls: cannot access words.txt: No such file or directory
[cmd_test@btjeon-naver ~]$ ls -l "two words.txt"
-rw-rw-r-- 1 cmd_test cmd_test 8 May 12 06:21 two words.txt

쌍 따옴표(")로 텍스트를 묶으면 쉘에서 사용하는 모든 특수한 기호들이 가진 의미가 없어지고 대신 일반적인 문자들로 인식된다. (단, $, \, ` 기호는 예외다.)

 

[cmd_test@btjeon-naver ~]$ echo "$USER $((2+2)) $(cal)"
cmd_test 4       May 2022      
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

단어 분할, 경로명 확장, 틸드(~) 확장, 괄호 확장을 숨길 수 있지만 매개변수 확장, 산술 확장, 명령어 치환은 그대로 실행된다.

 

[cmd_test@btjeon-naver ~]$ echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /home/cmd_test/lazy_dog.txt /home/cmd_test/ls-error.txt /home/cmd_test/ls-output.txt /home/cmd_test/ls.txt /home/cmd_test/two words.txt a b foo 4 cmd_test
[cmd_test@btjeon-naver ~]$ echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*.txt {a,b} foo 4 cmd_test
[cmd_test@btjeon-naver ~]$ echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER

모든 확장을 숨겨야 한다면 따옴표(') 기호를 사용하면 된다.

 

[cmd_test@btjeon-naver ~]$ echo "The balance for user $USER is: \$5.00"
The balance for user cmd_test is: $5.00

하나의 문자를 인용하고 싶을 때는 백슬래시(\)를 해당 문자 앞에 추가하면 된다. (이것을 이스케이프 문자(escape character)라고 부른다.)

 

 

 

 

 

 

 

출처 : 리눅스 커맨드라인 완벽 입문서

 

'IT일반 > Linux' 카테고리의 다른 글

Command Line - 퍼미션  (0) 2022.05.14
Command Line - 고급 키보드 기법  (0) 2022.05.13
Command Line - 리다이렉션  (0) 2022.05.06
Command Line - 명령어와 친해지기  (0) 2022.05.05
Command Line - 파일과 디렉토리 복사  (0) 2022.05.05