'CS/Shell/Perl/Python'에 해당되는 글 20건

  1. 2013.08.13 [SHELL] 특수 변수
  2. 2011.06.08 [MAKE] Functions for Transforming Text
  3. 2011.06.08 [MAKE] Conditional Parts
  4. 2011.06.08 [MAKE] How to Use Variables
  5. 2011.04.24 [BASH, PERL] Multiline string
  6. 2011.04.15 [PERL] 최소 일치 정규 표현식 (Non-greedy regular expression)
  7. 2011.03.14 [PERL] 하나의 정규 표현식으로 복수개의 아이템 치환하기
  8. 2011.03.14 [BASH] String manipulation
  9. 2010.08.29 [PERL] 특수 변수
  10. 2010.08.18 [PERL] Regular Expression
  11. 2010.08.17 [PERL] UTF-8 encoding 으로 파일에 쓰기
  12. 2010.08.16 [PERL] Timer
  13. 2010.08.13 [SED] Replaces a certain character in a string with a newline in MAC OSX
  14. 2010.08.12 [FIND] find using regular expression (-regex)
  15. 2010.08.12 [BASH] 공백문자(space)가 포함된 파일패스 list 처리
  16. 2010.08.12 [BASH] rm -rf path/to/delete/*
  17. 2010.08.11 [SED] edit in place without backup
  18. 2010.08.05 [BASH] Builtin: test, [
  19. 2010.07.27 [BASH] 변수
  20. 2010.06.04 [MAKE] Target

[SHELL] 특수 변수

CS/Shell/Perl/Python 2013. 8. 13. 10:27

원문 : http://unixhelp.ed.ac.uk/scrpt/scrpt2.2.2.html


 Name 

 Description

 $1 - $9

 위치 파라미터의 값

 $0

 현재 실행되고 있는 command의 이름

 $#

 위치 파라미터의 개수

 $?

 가장 마지막에 실행된 command의 exit status

 $$

 현재 shell의 pid

 $!

 background 에서 가장 마지막에 실행된 pid

 $-

 the current options supplied to this invocation of the shell

 $*

 a string containing all the arguments to theshell, starting at $1

 $@

 same as above, except when quoted


:

[MAKE] Functions for Transforming Text

CS/Shell/Perl/Python 2011. 6. 8. 16:43
원문 : GNU make

8.4 Functions for Conditionals

 
조건 표현을 제공하는 세 가지 함수가 있다. 모든 인자가 초기에 확장되지 않는다는 것이 이 세 함수의 중요한 면이다. 인자 중 확장되기를 원하는 인자만이 확장된다.
  1. $(if condition, then-part [,else-part])
    if함수는 함수적 문맥에서 조건적 확장에 대한 지원을 제공한다.
    첫 번째 인자인 condition은 먼저 모든 시작과 끝의 공백 문자를 제거하고, 그 이후에 확장된다. 만약 확장이 non-empty 문자열이라면 그 조건은 참으로 간주되며, 그렇지 않은 경우 거짓으로 간주된다.
    만약 조건이 참이라면 두 번째 인자인 then-part가 평가되고, 이것이 if 함수 전체 평가의 결과로 사용된다.
    만약 조건이 거짓이라면 세 번째 인자인 else-part가 평가되고, 이것이 If 함수 전체 평가의 결과로 사용된다. 만약 세 번째 인자가 없다면, if 함수는 아무것도 평가하지 않는다.
    주의할 것은 오직 the-part나 else-part만 평가되고, 두 부분이 모두 평가되지 않는다는 것이다. 따라서 side-effect가 발생할 수 있다.
     
  2. $(or condition1 [, condition2 [, condition3 ...]])
    or 함수는 "short-circuiting" OR 연산을 제공한다. 각 인자는 순서대로 확장된다. 만약 인자가 non-empty 문자열로 확장된다면 처리는 멈추고 그 확장의 결과가 결과 문자열이 된다. 만약 모든 인자가 확장되었고 모두가 거짓(empty)이라면, 확장의 결과는 빈 문자열이다.

  3.  $(and condition1 [, condition2 [, condition3 ...]])
    or 함수는 "short-circuiting" AND 연산을 제공한다. 각 인자는 순서대로 확장된다. 만약 인자가 empty 문자열로 확장된다면 처리는 멈추고 그 확장의 결과가 결과 문자열이 된다. 만약 모든 인자가 non-empty string으로 확장되었다면, 확장의 결과는 마지막 인자의 확장이 된다.
.
:

[MAKE] Conditional Parts

CS/Shell/Perl/Python 2011. 6. 8. 15:18
원문 GNU make
 

7.1 Example of a Conditional 


다음 예제는 CC변수가 gcc인 경우에 make가 라이브러리들 중 하나의 셋을 사용하게 하고, gcc가 아닌 경우에는 다른 라이브러리 셋을 사용하게 한다.

libs_for_gcc = -lgnu
normal_libs =

foo: $(objects)
ifeq ($(CC),gcc)
    $(CC) -o foo $(objects) $(libs_for_gcc)
else
    $(CC) -o foo $(objects) $(normal_libs)
endif

 
 혹은, 다음과 같이 변수를 조건부로 할당하고, 변수를 명시적으로 사용할 수도 있다

libs_for_gcc = -lgnu
normal_libs =

ifeq ($(CC),gcc)
    libs=$(libs_for_gcc)
else
    libs=$(normal_libs)
endif

foo: $(objects)
    $(CC) -o foo $(objects) $(libs) 

 

7.2 Syntax of Conditionals


syntax는 else가 없는 다음의 가장 간단한 형태부터 else를 포함한 두가지 형태가 있다.

conditional-directive
text-if-true
endif

conditional-directive
text-if-true
else
text-if-false
endif

conditional-directive
text-if-true
else
text-if-false
else
text-if-false
endif


조건을 테스트하는데는 다음의 4가지 지시자가 있다
  1. ifeq
    • iffeq (qrg1, arg2)
    • ifeq 'arg1' 'arg2'
    • ifeq "arg1" "arg2"
    • ifeq "arg1" 'arg2
    • 'ifeq 'arg1' "arg2"
      arg1과 arg2에 있는 변수의 참조를 모두 확장하여 그들을 비교한다. 만약 일치한다면 text-if-true 가 적용된다.
       
  2. ifneq
    • ifneq (qrg1, arg2)
    • ifneq 'arg1' 'arg2'
    • ifneq "arg1" "arg2"
    • ifneq "arg1" 'arg2'
    • ifneq 'arg1' "arg2"
      arg1과 arg2에 있는 변수의 참조를 모두 확장하여 그들을 비교한다. 만약 일치하지 않는다면 text-if-true 가 적용된다.
       
  3. ifdef variable-name
    name은 변수에 대한 레퍼런스가 아니라 변수의 이름을 나타낸다.

    bar = true
    foo = bar
    ifdef $(foo)
        frobozz = yes
    endif 

    $(foo)는 확장되어 bar가 되고, bar는 참조가 아니라 이름으로 간주된다. 


    만약 variable-name이 non-empty 값이 아니라면 text-if-true 가 적용된다.

    ifdef는 변수를 확장하여 그 값이 비어있는지는 확인하지 않는다(그 이름이 정의 되어 있는지만 확인). non-empty인지 확인하기 위해서는 ifeq($(foo),)를 사용한다.

    bar =
    foo = $(bar)
    ifdef foo
        frobozz = yes
    else
        frobozz = no
    endif

    sets ‘frobozz’ to ‘yes’, while:
    foo =
    ifdef foo
        frobozz = yes
    else
        frobozz = no
    endif

    sets ‘frobozz’ to ‘no’.

     
  4. ifndef variable-name 
    만약  vraiable-name이 empty 값이라면, text-if-true 가 적용된다.

7.3 Conditionals that Test Flags


findstring 함수와 함께 MAKEFLAGS 변수를 사용하여 -t 와 같은 make command flags를 테스트하는 조건을 쓸 수 있다. 
이것은 touch가 파일을 갱신하는데 충분하지 않을 때 유용하다.
findstring 함수는 한 문자열이 다른 부분 문자열로 나타나는지 확인한다. 만약 '-t' 플래그에 대해서 테스트하길 원한다면, 첫번째 문자열로 't'를 사용하고 비교할 다른 문자열로 MAKEFLAGS의 값을 사용한다.
다음은 아카이브 파일을 갱신하는 것에대해 마킹하는것을 종료하기 위해 'ranlib -t'를 사용하는것을 어떻게 정리하는지를 보여준다.

archive.a: ...
ifneq (,$(findstring t,$(MAKEFLAGS)))
    +touch archive.a
    +ranlib -t archive.a
else
    ranlib archive.a
endif

'+' 접미어는 명령행 라인이 '-t' 플래그를 사용했음에도 불구하고 실행될 수 있게 하기 위해 "recursive" 하다는 것을 표시한다. (Section 5.7 Recursive Use of make 참고)
:

[MAKE] How to Use Variables

CS/Shell/Perl/Python 2011. 6. 8. 06:52
원문 : GNU make

6.1 Basics of Variable References


변수 이름에는 대문자를 사용하는 것이 관행이다.
하지만, makefile 안에서 internal purpose 을 수행하는 것은 소문자를 사용하고,  암묵적인 규칙을 제어하는 파라매터나 컴맨드 옵션에서 사용자가 오버라이드 해야만 하는 파라메터에 대해서는 대문자로 예약할 것을 것을 권장 한다.

$(foo) 나 ${foo} 와 같이 변수 이름을 () 나 {}로 감사고 $를 붙여서 참조할 수 있다.

6.2 The Two Flavors of Variables


GNU make 에서는 변수가 값을 갖도로 하는 네 가지 방법이 있다.
  1. recursive expanded variable 
    이 종류의 변수는 '='를 통해서 정의하거나(Section 6.5 [Setting Variables] 참고), define 지시자를 통해서 정의될 수 있다.
    만약 다른 변수에 대한 참조를 포함하고 있다면, 이 참조는 이 변수가 치환될 때마다 확장된다.

    foo = $(bar)
    bar = $(ugh)
    ugh = Huh?

    all:;echo $(foo)
    에서 $(foo)는 $(bar)로 확장되고, 이것은 다시 $(ugh)로  확장되어, 최종적으로 Huh? 로 확장될 것이다.


    이 종류의 변수는 모든 다른 make에서도 지원한다. 하지만

    CFLAGS = $(include_dirs) -O
    include_dirs = -Ifoo -Ibar

    CFLAGS = $(CFLAGS) -O 

    와 같이 한 경우, 변수 확장에 의해 무한 루프를 돌게 된다.

  2. expanded variable
    변수가 정의될 때 어떤 다른 변수나 함수에 대한 참조를 확장하여 한번만 스캔 되고 확장된다. 즉, 이 변수가 정의 되었을 때의 값을 가진다.

    x := foo
    y := $(x) bar
    x := later
    는,
    y := foo bar
    x := later 
    와 같다.  


  •  ?=를 이용해서 변수가 정의되어 있지 않을때만 정의할 수 있다.

    FOO ?= bar 는

    ifeq ($(origin FOO), undefined)
        FOO = bar
    endif

    와 동일하다. 


     만약 bar 가 정의되어 있지 않았을 때 FOO = bar 와 같이 한다면, FOO는 empty value로 정의된 상태가 된다.

  •  +=를 이용하여 이미 정의된 변수의 값에 추가로 문자를 더할 수 있다.

    objects = main.o foo.o bar.o utils.o
    objects += another.o


    +=를 사용하는 것은 :=를 다음과 같이 사용하는 것과 유사하다. 

    objects = main.o foo.o bar.o util.o
    objects := $(objects) another.o 

     
    만약 +=로 덧붙일 변수가 이전에 정의되어 있지 않았다면, +=는 =(recursively-expanded variable)과 동일하게 동작한다. 

6.3 Advanced Features for Reference to Variables


  • substitution reference
    지정한 대치값으로 변수의 값을 치환한다.  $(var:a=b) 혹은 ${var:a=b}와 같은 형식으로 사용되며, var 변수에 있는 a로 끝나는(다음에 whitespace가 나오는 a) 모든 a를 b로 치환한다.

    foo := a.o b.o c.o
    bar := $(foo:.o=.c)

    는 bar 를 a.c b.c c.c 로 치환한다.

    이는, 사실상 patsubst(Section 8.2 [Functions for String Substitution and Analysis] 참고) 함수 확장의 축약형이다. patsubst 함수의 모든 기능을 사용하기 위해서는 $(var:%a=%b)와 같이 %를 덧붙임 형태를 사용해야 한다. 

    foo := a.o b.o c.o
    bar := $(foo:%.o=%.c) 

    는 $(patsubst .o,.c,$(var))와 동일하다. 


  • computed variable name (nested variable reference)
     변수들은 변수의 안에 있는 이름으로 참조될 수 있다. 이를 computed variable name 혹은 nested variable reference라고 한다. 예를 들어

    x = y
    y = z
    a :=$($(x))

    에서 $($(x)는 $(y)가 되어, 결국 z가 된다.


    혹은 재귀적으로

    x = $(y)
    y = z
    z = Hello
    a := $($(x))

    에서 $($(x)) 는 $($(y))가 되고, 이것은 $(z) 가 되어, 결국 Hello가 된다. 


    Nested variable 참조는 변경된 참조나 함수 실행(Chapter 8 [Functions for Transforming Text] 참고) 등을 포함할 수 있다. 예를 들어 subst 함수를 사용하여

    x = variable1
    variable2 := Hello
    y = $(subst 1,2,$(x))
    z = y
    a := $($($(z))))

    $($($(z)))는 $($(y))가 되고, y는 variable2의 값을 가지게 되기 때문에,  $(variable2)가 되어, 결국 Hello를 정의하게 된다. 


    computed variable name은 하나의 변수 참조로 이루어질 필요는 없다. 예를 들어

    a_dirs := dira dirb
    1_dirs := dir1 dir2

    a_files :=filea fileb
    1_files :=file1 file2

    ifeq "$(use_a)" "yes"
        a1 := a
    else
        a1 := 1
    endif

    ifeq "$(use_dirs)" "yes"
        df := dirs
    else
        dif := files
    endif

    dirs := $($(a1)_$(df))

    $(a1) 이 a를 정의하고 $(df)가 dirs를 정의한다면, a_dirs가 되어 dirs 는 $(a_dirs)가 되어 결국,
    dirs := dira dirb
    를 정의하게 된다.

     
    computed variable name은 치환 참조에서도 사용될 수 있다.

    a_objects := a.o b.o c.o
    1_objects := 1.o 2.o c.o

    sources := $($(a1)_objects:.o=.c)
    는 a1이 어떤것을 가리키느냐에 따라

    sources := a.c b.c c.c
    혹은
    sources :=1.c 2.c 3.c
    가 될 수 있다. 


    또한, computed variable name을 변수 대입의 왼편이나 define 지시자에서 사용할 수 있다.

    dir = foo

    $(dir)_sources := $(wildcard $(dir)/*.c)

    define $(dir)_print = 
     
    lpr $($(dir)_sources)

    endef

    이는 foo_sources와 foo_print를 정의한다. 



:

[BASH, PERL] Multiline string

CS/Shell/Perl/Python 2011. 4. 24. 15:50
참고:
http://serverfault.com/questions/72476/clean-way-to-write-complex-multi-line-string-to-a-variable

BASH

cat <<EOF

This is

Multiline

String.

EOF

read -d '' VAL<<EOF

This is

Multiline

String.

EOF


PERL

my $VALUE =<<ENDVALUE;

This is

Multiline

String.

ENDVALUE

my $VALUE = "This is

Multiline

String.

";


:

[PERL] 최소 일치 정규 표현식 (Non-greedy regular expression)

CS/Shell/Perl/Python 2011. 4. 15. 13:14
원문: http://www.bayview.com/blog/2003/02/12/non-greedy-regular-expressions/

$src = "www.google.com"

$www = ($src =~ /(.*)\./ && 1);
과 같이 할 경우 기본적으로 greedy matching이 되기 때문에
$www = "www.google" 이 된다.

방법 1.

$www = ($src =~ /([^.]*)\./ && 1);


방법 2.
.*? 혹은 .+? 를 사용하여 Non-greedy matching 시킨다.

$www = ($src =~ /(.*?)\./ && 1);



:

[PERL] 하나의 정규 표현식으로 복수개의 아이템 치환하기

CS/Shell/Perl/Python 2011. 3. 14. 16:42
원문 : StackOverflow
참고 : 

#!/usr/bin/perl

use strict;
use warnings;

my %replace = (
    quick => "slow",
    lazy  => "energetic",
);

my $regex = join "|", keys %replace;
$regex = qr/$regex/;

my $s = "The quick brown fox jumps over the lazy dog";

$s =~ s/($regex)/$replace{$1}/g;

print "$s\n";


참고. $1 에 대해서:
/A(dam|nne|ndrew)/
와 같은 정규식이 있다고 할때, $1이 생성되고, 이는 dam, nne, ndrew등의 값을 가지게 된다. 만약 이후에 괄호가 있다면 그에 일치하는 값이 $2, $3, ...의 변수에 할당된다.

/A(?:dam|nne|ndrew)/
와 같이 ?:를 사용할 경우 해상 괄호에 대해서는 그에 일치하는 변수를 생성하지 않는다.

:

[BASH] String manipulation

CS/Shell/Perl/Python 2011. 3. 14. 13:42
참고


1. String Length

${#string}



2. Substring Extraction

${string:position}
$string에서 position에 있는 substring
만약 $string 파라메터가 "*"나 "@"이면 position에서 시작하는 위치 매개변수를 추출해 낸다.
${string:position:length}
$string에서 position부터 length까지의 substring

stringZ=abcABC123ABCabc
#           0123456789.....
#           0-based indexing.

echo ${stringZ:0}                            # abcABC123ABCabc
echo ${stringZ:1}                            # bcABC123ABCabc
echo ${stringZ:7}                            # 23ABCabc

echo ${stringZ:7:3}                         # 23A



3. Substring Removal

${string#substring}
$string의 앞 부분에서 가장 짧게 일치하는 $substring을 삭제
${string##substring}
$string의 앞 부분에서 가장 길게 일치하는 $substring을 삭제

stringZ=abcABC123ABCabc
#           |------|                shortest
#           |----------------|    longest

echo ${stringZ#a*C}       # 123ABCabc
echo ${stringZ##a*C}     # abc

${string%substring}
$string의 뒷 부분에서 가장 짧게 일치하는 $substring을 삭제
${string%%substring}
$string의 뒷 부분에서 가장 길게 일치하는 $substring을 삭제

stringZ=abcABC123ABCabc
#                                    ||    shortest
#              |------------------|    longest

echo ${stringZ#b*c}       # abcABC123ABCa
echo ${stringZ##b*c}     # a



4. Substring Replacement

${string/substring/replacement}
처음 일치하는 $substring을 $replacement로 대치. $string 자체가 변화되지는 않는다.
${string//substring/replacement}
일치하는 모든 $substring을 $replacement로 대치. $string 자체가 변화되지는 않는다.

stringZ=abcABC123ABCabc
echo ${stringZ/abc/xyz}       # xyzABC123ABCabc
                                            # Replaces first match of 'abc' with 'xyz'.

echo ${stringZ//abc/xyz}      # xyzABC123ABCxyz
                                            # Replaces all matches of 'abc' with # 'xyz'.

# Can the match and replacement strings be parameterized?
match=abc
repl=000
echo ${stringZ/$match/$repl}  # 000ABC123ABCabc
#                     ^           ^            ^^^
echo ${stringZ//$match/$repl} # 000ABC123ABC000
#                      ^          ^            ^^^               ^^^

# What happens if no $replacement string is supplied?
echo ${stringZ/abc}           # ABC123ABCabc
echo ${stringZ//abc}          # ABC123ABC

${string/#substring/replacement}
$substring이 $string의 맨 앞에서 일치하면 $replacement로 대치.
${string/%substring/replacement}
$substring이 $string의 맨 뒤에서 일치하면 $replacement로 대치.

stringZ=abcABC123ABCabc

echo ${stringZ/#abc/XYZ}          # XYZABC123ABCabc
                                                  # Replaces front-end match of 'abc' with 'XYZ'.

echo ${stringZ/%abc/XYZ}          # abcABC123ABCXYZ
                                                   # Replaces back-end match of 'abc' with 'XYZ'.

:

[PERL] 특수 변수

CS/Shell/Perl/Python 2010. 8. 29. 23:58
원문 : Perl 프로그래밍 (2nd Ed)

전역 특수 변수

$_
: 기본 입력 및 패턴 일치 공간. 다음 각 쌍은 동일한 효과를 갖는다.
while (<>) { ... }
while (defined($_ = <>)) { ...}
/^Subject:/
$_ =~ /^Subject:/
chop
chop($_)

$.
: 가장 최근에 읽은 파일 핸들의 현재 입력 행 번호.
: 명시적으로 파일 핸들을 닫으면 이 값을 리셋하는 효과가 있다.
: <>는 명시적으로 파일 핸들을 닫지 않으므로, ARGV로 지정된 파일에 대해서는 행 번호는 계속 증가한다.
: $.를 지역화하는 것은 Perl이 최근에 읽어 들인 파일 핸들을 지역화하는 효과가 있다.

$/
: 입력 레코드 구분자로 기본값은 개행 문자이다.
: 만약 널 문자열로 지정되면 빈 줄(blank line)을 구획문자로 취급한다.
: 여러 개의 글자를 구획문자로 사용하기 위해서 여러 개의 글자로 이루어진 문자열을 지정할 수도 있다.
undef $/;
$_ = <FH>;          # whole file now here

$,
: print 연산자에 적용되는 출력 필드 구분자이다.
: 보통 print 연산자는 쉼표로 구분된 필드를 출력한다.
: awk에서와 비슷하게 동작하도록 하려면, awk의 OFS 변수를 지정해서 출력될 필드를 구분하는 것과 마찬가지 방법으로 이 변수를 지정하면 된다.

$\
: print 연산자에 적용되는 출력 레코드 구분자이다.
: 보통 print 연산자는 쉼표로 구분된 필드를 출력하며, 뒤에는 개행 문자나 레코드 구분자가 없다고 가정한다.
: awk에서와 비슷하게 동작하도록 하려면, awk의 ORS 변수를 지정해서 print의 마지막 부분에 출력될 내용을 지정하는 것과 같이 이 변수를 지정하면 된다.

$*
: 이 변수는 겹 따옴표 문자열에서 치환되는 리스트 값에 적용된다는 점만 제외하고는 $,와 동일하다.
: 기본값은 스페이스 이다.

$;
: 다차원 배열 연산에서의 첨자 구분자이다. 
: 만약 다음과 같이 해쉬 요소를 참조하는 경우
$foo{$a, $b, $c}
실제로는 다음을 의미한다.
$foo{join($;, $a, $b, $c)}

: 그러나 다음과 같이 할 경우
@foo{$a, $b, $c}
실제로는 다음을 의미하게 되므로 주의하여야 한다.
($foo{$a}, $foo{$b}, $foo{$c})

$^L
: 쪽 넘김시 출력될 내용을 지정한다.
: 기본값은 "\f" 이다.

$:
: 문자열이 나뉘어 질 때 출력서식문에서 ^로 시작하는 연속 필드를 채우는데 사용되는 문자의 세트를 지정한다.
: 기본값은 "\n-" 이다.

$^A
: format 행에 대한 write accumulator의 현재값을 나타낸다.
: formline을 포함하는 출력서식문을 사용하여 결과를 $^A에 넣도록 할 수 있다.
: 출력서식을 알아낸 다음 write는 $^A의 내용을 출력한 다음 $^A를 비운다. 따라서 formline을 사용하지 않고서는 $^A의 값을 알아낼 수 없다.

$?
:  가장 최근에 닫은 파이프, 백틱(`) 명령, 혹은 system 연산자 등에서 반환된 결과를 담고 있다.
: 실제로 이 값은 wait(2) 시스템 호출에 의해 반환된 상태이므로, 서브프로세스의 종료값은 실제로 ($? >> 8)에 해당한다.
: 따라서 많은 시스템에서 $? & 255 하면 프로세스로부터 어떤 시그널이나 코어 덤프의 발생 여부를 알 수 있다.

$!
: 숫자 구문에서 사용될 경우 현재 실행중인 Perl에서 errno변수의 현재 값을 재공한다.
: 문자열 구문에서 사용될 경우, 해당되는 시스템 오류 문자열을 제공한다.

$@
: 가장 최근의 eval 명령어를 수행한 결과 발생한 문법 오류 메세지를 담고 있다.
: 최근 eval 명령어가 정상적으로 수행되어 오류가 발생하지 않았다면 널 값을 갖는다.

$$
: Perl이 현재 스크립트를 수행하는 프로세스 번호

$<
: 현재 프로세스의 실 user ID (uid)
: set-id 루틴을 지원할 때만 지정할 수 있다.

$>
: 현재 프로세스의 유효 uid
: set-id 루틴을 지원할 때만 지정할 수 있다.

$(
: 현재 프로세스의 실 GID
: set-id 루틴을 지원할 때만 지정할 수 있다.

$)
: 현재 프로세스의 유효 GID
: set-id 루틴을 지원할 때만 지정할 수 있다.

$0
: 현재 수행 중인 Perl 스크립트를 포함하고 있는 파일의 이름.
: $0에 값을 대입하여 ps 프로그램이 참조하는 영역을 변경할 수 있다.
: 이것은 현재 수행중인 프로그램을 숨기는 것보다 현재 프로그램의 상태를 나타내는 방법으로 유용하게 쓰인다. 그러나 모든 시스템에서 이처럼 동작하지는 않는다.

$]
: 현재 Perl의 버전 + 패치레벨/1000을 반환한다.

$^D
: 디버깅 플래그의 현재 값

$^F
: 시스템 파일 기술자(system file descriptor)의 최대값으로, 기본적으로 2 이다.

$^H
: 특정 pragmatic 모듈에 의해 활성화 되는 내부 컴파일러 힌트값 (이 값은 무시하고 pragma문을 사용하라)

$^I
: inplace_edit 확장의 현재 값. inplace 편집을 활성화하려면 undef를 사용한다.
 
$^O
: 현재 Perl 바이너리가 컴파일된 시스템 운영체제 이름. Config 모듈 대신 사용할 수 있는 간단한 방법이다.

$^P
: 디버거가 자기 자신을 디버그하지 않도록 클리어하는 내부 플래그.
: 사용자가 이 값을 클리어하여 확실하게 디버그를 하지 않도록 할 수 있다.

$^T
: 1970년부터 시작하여 해당 스크립트가 실행된 시간을 초 단위로 환산한 값.
: -M, -A, -C와 같은 파일 테스트 연산자는 이 값에 근거한다.

$^W
: 현재 경고 스위치의 값

$^X
: 실행된 Perl 바이너리 자신의 이름. C엑서의 argv[0]에 해당

$ARGV
: <ARGV>로부터 읽어 들일 때 현재 파일의 이름



전역 특수 변수 

@ARGV
: 해당 스크립트에 대한 명령어 행 파라미터를 담고 있는 배열.
: $#ARGV는 파라미터의 수-1 을 담고 있고, $ARGV[0]는 프로그램의 이름이 아니라 전달된 첫 번째 파라미터를 담고 있다는 것을 주의.
: 프로그램의 이름은 $0을 참조 하라.

@INC
: Perl 스크립트가 do EXPR, require, use 구조를 사용할 때 참조해야 하는 위치 리스트를 담은 배열.
: 초기에는 -I 명령어 행 스위치에 해당하는 값과, 기본 Perl 라이브러리의 위치를 포함하고 있다.
: 현재 디렉토리를 참조하려면 "."를 추가하면 된다.
: 실행시 @INC 리스트를 변경할 필요가 있을 때는, 시스템과 관련된 라이브러리 모듈을 제대로 불러 들이기 위해 다음과 같이 lib모듈을 사용해야만 한다.
use lib '/mypath/libdir/';
use SomeMod;

@F
: -a 스위치가 사용되얼을 때 입력 행이 split되어 입력되는 배열.
: -a 스위치가 사용되지 않으면 이 배열은 특별한 의미가 없다.

%INC
: do나 require를 통해 포함된 각 파일의 파일명을 담고 있는 해쉬.
: 키는 사용자가 지정하는 파일명이고, 값은 실제로 해당 파일을 찾은 위치를 갖고 있다.
: require 명령을 사용할 때, 이 값을 참조하여 주어진 파일의 포함 여부를 결정한다.

%ENV
: 현재 환경 변수의 값.
: %ENV의 값을 변경하면 자식 프로세스의 환경을 바꾸게 된다.
: 환경 변수에서 특정한 값을 없애려면 undef 대신 delete를 사용해야 한다.

%SIG
: 다양한 시그널을 처리하기 위한 시그널 핸들러에 의해 사용되는 해쉬.
sub handler {
    local($sig) = @_;
    print "Caught a SIG$sig--shutting down\n";
    close(LOG);
    exit(0);
}
$SIG{INT} = 'handler';
$SIG{QUIT} = 'handler';

$SIG{INT} = 'DEFAULT';      # restore default action
$SIG{QUIT} = 'IGNORE';      # ignore SIGQUIT

: $SIG{__WARN__} 로 지정된 루틴은 경고 메세지가 출력될 때 호출된다. 경고 메세지는 첫 번째 파라메터로 전달된다. 
- 후크가 존재하면 일반적으로 STDERR로 출력되던 경고 메세지가 출력되지 않게 된다.
: $SIG{__DIE__} 로 지정된 루틴은 치명적 예외 처리가 수행될 때 호출된다. 오류 메세지는 첫 번째 파라메터로 전달된다.
- 후크 루틴에서 반환될 때, 후크 루틴 자신이 goto나 루프 종료, die등에 의해 종료되지 않는 경우, 예외 처리 루틴은 마치 해당 후크가 없었던 것처럼 동작한다.
- __DIE__ 핸들러는 호출된 동안 명시적으로 비활성되어, __DIE__ 핸들러에서 실제 die를 호출할 수 있게 된다.



전역 특수 파일 핸들

ARGV
: @ARGV에 포함된 명령어 행 파일명에 대해 반복적으로 수행되는 특수한 파일 핸들.
: 보통 널 파일 핸들 <>로 표히된다.

STDERR
: 임의의 패키지에서 표준 오류를 위한 특수 파일 핸들.

STDIN
: 임의의 패키지에서 표준 입력을 위한 특수 파일 핸들.

STDOUT
: 임의의 패키지에서 표준 출력을 위한 특수 파일 핸들.

DATA
: 스크립트를 포함하는 파일에서 __END__ 토큰 다음에 나타나는 임의의 내용을 참조하는 특수 파일 핸들.
: 혹은, __DATA__ 를 찾는 같은 패키지에서 데이터를 읽는 동안 필요로 하는 파일 내에 __DATA__ 토큰 바로 다음에 나타나는 임의의 내용을 위한 파일 핸들.

_
: 가장 최근의 stat, lstat, 파일 테스트 연산 결과에 관한 정보를 캐쉬하기 위해 사용되는 특수 파일 핸들.



정규 표현식 특수 변수

$digit
: 가장 최근에 일치된 순서대로 괄호에 해당하는 일치된 문자열을 포함하고 있다. (\digit 와 같은 형태로도 사용된다.)

$&
: 가장 최근에 성공적으로 일치된 문자열이며, 블록 내에서 감추어져 일치된 내용이나 현재 블록에서 eval로 둘러 싸여 있는 내용은 포함하지 않는다.

$`
: 가장 최근에 성공적으로 일치된 문자열의 앞부분에 해당하는 문자열이며, 블록 내에서 감추어져 일치된 내용이나 현재 블록에서 eval로 둘러 싸여 있는 내용은 포함하지 않는다.

$'
: 가장 최근에 성공적으로 일치된 문자열의 뒷부분에 해당하는 문자열이며, 블록내에서 감추어져 일치된 내용이나 현재 블록에서 eval로 둘러 싸여 있는 내용은 포함하지 않는다.

$+
: 가장 최근의 일치 패턴에 의해 마지막 괄호로 일치된 문자열이며, 실제로 어떤 교대 문자열이 일치되었는지를 모를 경우에 유용하다.



파일 핸들 특수 변수 

$|
: 0이 아닌 값으로 지정하면 핸재 선택된 출력 채널로 매번 write 나 print가 행해질 때마다 fflush을 수행하도록 한다.
: 기본값은 0이며, 이것은 많은 시스템에서 터미널로 출력을 의미하는 경우 STDOUT은 기본적으로 라인 버퍼링으로, 그 밖의 경우 블록 버퍼링으로 처리되는 것을 의미한다.
: 이 변수의 값을 지정하는 것은 rsh에서 Perl 스크립트를 실행하면서 그 출력 결과를 보고 싶을 때와 같은 경우 유용하다.

$%
: 현재 선택된 출력 채널의 현재 쪽 번호

$=
: 현재 선택된 출력 채널의 출력 가능한 줄의 수. 기본값은 60

$-
: 현재 선택된 출력 채널의 쪽에서 남아 있는 줄 수

$~
: 현재 선택된 출력 채널에 적용될 출력서식의 이름. 기본값은 파일 핸들의 이름

$^
: 현재 선택된 출력 채널에 적용될 머리글 출력서식의 이름. 기본값은 파일 핸들에  _TOP을 붙인 것
:

[PERL] Regular Expression

CS/Shell/Perl/Python 2010. 8. 18. 00:11
원문 : Perl 프로그래밍 (2nd Ed)
참고 : http://gypark.pe.kr/wiki/Perl/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D

m/PATTERN/gimosx
/PATTERN/gimosx

n. /를 구분자로 사용할 경우 패턴 앞에 위치하는 m은 지정하지 않아도 된다. m을 사용하는 경우, 영문자나 공백 문자가 아닌 임의의 문자를 구분자로 사용할 수 있다.

n. 주어진 문자열에서 패턴을 검색하고, 그 결과로 스칼라 구문에서 참(1)이나 거짓("")을 반환한다.

n. 스칼라가 아니라 리스트 값을 필요로 하는 구문에 사용될 경우, 일치된 결과는 패턴 내에서 괄호로 지정된 재참조 문자열의 리스트를 반환한다.
만약, 패턴 일치가 실패하면, 널 리스트가 반환된다. 패턴이 일치했더라도 패턴 내에 괄호로 지정된 재참조 문자열이 없으면 리스트값 (1) 이 반환된다.
if (($F1, $F2, $F3) = ($foo =~ /^\s*(\S+)\s+(\S+)\s*(.*)/))

n. =~ 나 =!에 문자열을 지정하지 않았을 경우에는 기본 문자열 변수 $_를 검색한다.


변환자 g 
: 전역 패턴 일치(global pattern matching)를 지정한다. 즉, 주어진 문자열 내에서 가능한 여러 번 패턴 일치를 찾게 된다.
: 만약, 괄호가 하나도 없는 경우는 마치 전체 패턴을 괄호로 둘러싼 것과 같이 일치된 문자열 모두로 이루어진 리스트를 반환하다.
: 스칼라 구문에서 사용하면 매번 주어진 문자열과 일치할 때마다 참을 반환하고, 일치가 모두 끝나면 거짓을 반환한다.
($one, $five, $fifteen) = (`uptime` =~ /(\d+\.\d+)/g);

변환자 i
: 대소문자를 구별 없이 패턴 일치

변환자 m
: 문자열을 여러 줄로 취급(^와 $는 \n과 일치)

변환자 s
: 문자열을 한 줄로 취급(^와 $는 \n을 무시, 그러나 .는 \n과 일치)

변환자 x
: 정규 표현식을 분석할 때 역슬래쉬가 붙지 않은 공백 문자나, 문자 클래스 내에 들어있는 공백 문자를 무시하도록 한다.
: 공백문자와 주석문을 이용해 패턴의 가독성을 늘릴 때 사용

변환자 o
: 패턴을 한 번만 컴파일



s/PATTERN/REPLACEMENT/egimosx

n. 주어진 문자열에서 PATTERN을 찾으면, 일치된 것을 REPLACEMENT와 바꾸고 실제 교환된 것의 개수를 반환한다.
/g 변환자를 사용할 경우에는 교환된 개수가 1 보다 클 수 있다.
일치되지 않은 경우에는 거짓(0)을 반환한다.

n. 임의의 비 알파벳 문자, 비 공백 문자를 / 대신 구분자로 사용할 수 있다.
만약, PATTERN을 괄호 등과 같이 한 쌍으로 이루어진 구분자로 묶을 경우, REPLACEMENT는 PATERN에서 사용한 것과 다른 구분자를 사용할 수 있다.
s(foo)(bar)
혹은
s<foo>/bar/

n. 만약 구분자로 홑 따옴표를 사용하면, PATTERN이나 REPLACEMENT에 해당하는 부분에서 변수 치환은 일어나지 않는다.
홑 따옴표 이외의 문자를 구분자로 사용하는 경우에는 $를 문자열의 마지막 여부를 판단하는 문자가 아니라 변수로 생각하여, 패턴 검색시마다 변수 치환이 일어난다.


변환자 e
: 오른쪽의 내용을 표현식으로 평가한다.
$_ = 'abc123xyz';
s/d+/$&*2/e;                               # yields 'abc246xyz'
s/\d+/sprintf("%5d", $&)/e;          # yields 'abc  246xyz'
s/\w/$& x 2/eg;                            # yields aabbcc112233xxyyzz'



tr/SEARCHLIST/REPLACEMENTLIST/cds
y/SEARCHLIST/REPLACEMENTLIST/cds

n. y는 tr과 같은 표현이다.

n. SEARCHLIST에 주어진 문자별로 하나씩 살펴보면서, SEARCHLIST에 속하는 문자가 발견되면 해당 문자를 REPLACEMENTLISTd에 해당하는 문자와 바꾼다.

n. 실제로 교환되거나 지워진 글자의 숫자를 반환한다.

n. 한 글자에 대해 여러 가지로 변환될 수 있을 경우에는 가장 처음 것만이 사용된다.
$_ = "AAABCAADEFS";
tr/AAA/XYZ/;                                 # $_ 는 'XXXBCXXDEFS'


변환자 c
: SEARCHLIST의 문자 세트가 반전된다.
: 즉, 실제로는 SEARCHLIST에 포함되지 않은 문자에 대해서 검색이 이루어진다.

변환자 d
:  SEARCHLIST에 지정되어있으나 REPLACEMENTLIST에 주어지지 않은 글자(즉, 찾았으나 교환되지 않은 문자)는 삭제된다.
: 만약 d 변환자를 사용하지 않은 경우, 만일 REPLACEMENTLIST가 SEARCHLIST 보다 짧으면 REPLACEMENTLIST의 마지막 글자가 필요한 숫자만큼 반복된다.
$_ = "abc123";
tr/ab/A/;                                      # $_ 는 "AAc123"
tr/ab/A/d;                                    # $_ 는 "Ac123"


변환자 s
: 같은 글자로 변환되는 일련의(연속되는) 문자는 한 글자로 압축된다. 



위치 문자

: 문자열의 시작에서 일치 (/m 사용시 행의 시작에서 일치)

: 문자열의 끝에서 일치 (/m 사용시 행의 끝에서 일치)

\b
: 단어의 경계에서 일치 (\w 와 \W 사이)

\B 
: 단어 경계를 제외한 곳에서 일치

\A 
: 문자열의 시작에서 일치

\Z 
: 문자열의 끝에서 일치

\G 
: 이전의 m//g가 남긴 부분에서 일치

(?:...)
: (...)와 같은 기능을 하나 재참조 문자열을 만들지는 않는다.

(?=...) 
:  ...부분과 미리 일치(패턴에는 포함되지 않음)

(?!...) 
: ...부분과 미리 불일치 (패턴에는 포함되지 않음)
: /foo(?!bar)/는 "bar"가 바로 뒤에 오지 않는 임의의 "foo"와 일치한다.
: 하지만 /(?!foo)bar/ 와 같이 하여 "bar"앞에 "foo"가 아닌 것이 오는 것과 일치하도록 할 수는 없다.
: 위의 예는 다음과 같이 처리할 수 있다.
if (/foo/ and $` !~ /bar$/)



문자 클래스

\a : 알람(비프 음)
\n : 개행 문자
\r : carriage return
\f : formfeed
\t : 탭 문자
\e : 이스케이프 문

\d : [0-9]
\D : [^0-9]

\w : [a-zA-Z_0-9]
\W : [^a-zA-Z_0-9]

\s : [ \t\n\r\f]
\S : [^ \t\n\r\f]



반환자

$+
: 맨 마지막 괄호와 일치한 것을 반환한다.

$&
: 일치된 전체 문자열을 반환한다.

$`
: 일치된 문자열 앞의 모든 것을 반환한다.
:

[PERL] UTF-8 encoding 으로 파일에 쓰기

CS/Shell/Perl/Python 2010. 8. 17. 01:30
참고 
http://www.ahinea.com/en/tech/perl-unicode-struggle.html

문자(옥텟)열을 저장하기 위해 파일을 열 때 UTF-8로 encoding을 지정

open(FILE, ">:encoding(UTF-8)", "data");


:

[PERL] Timer

CS/Shell/Perl/Python 2010. 8. 16. 12:44
#!/usr/bin/perl                                                                                                                                                 

use Time::HiRes qw(ITIMER_REAL setitimer);

$SIG{ALRM} = sub {
    print "Alarm\n";
};


setitimer(ITIMER_REAL, 0.1, 5);
while (1)
{
    sleep ;
    print "Main Loop\n";
}
:

[SED] Replaces a certain character in a string with a newline in MAC OSX

CS/Shell/Perl/Python 2010. 8. 13. 21:57
참조 : http://www.computing.net/answers/unix/sed-newline/5640.html

리눅스에서는
$ echo Hello_World | sed 's/_/\n/'
Hello
World
로 정상적으로 동작한다.

그러나 Mac OSX의 sed(GNU sed 가 아닌 전통적인 sed - OSF1) 에서는 new line을 직접 quote시켜 주면 된다고 한다. 워~
$ echo Hello_World | sed 's/_/\
> /'




:

[FIND] find using regular expression (-regex)

CS/Shell/Perl/Python 2010. 8. 12. 14:46
find manpage

-regex pattern
: True if the whole path of the file matches pattern using regular expression.  
: To match a file named "./foo/xyzzy", you can use the regular expression ".*/[xyz]*" or ".*/foo/.*", but not "xyzzy" or "/foo/".

manpage에 잘 나와있는데, 제대로 읽어보지도 않고 고생만 했다.
find 시 항상 하던데로 매칭을 "*.html" 과 같이 한것이 원인이었다.
-name과 같이 명시적으로 파일 이름만을 매칭 시키는 것이 아니기 때문에, 전체 패스를 매칭 시켜야 한다.

다음은, html, htm, xhtml, xhtm 파일을 매칭시키는 구문
HTML_FILES=$(find "$SOURCE_WWW_PATH" -iregex ".*\.x\{0,1\}html\{0,1\}")


혹은 -E(extended regular expression)을 사용하여
HTML_FILES=$(find -E "$SOURCE_WWW_PATH" -iregex ".*\.x?html?")

:

[BASH] 공백문자(space)가 포함된 파일패스 list 처리

CS/Shell/Perl/Python 2010. 8. 12. 14:09
FILES=$(find path -name "*.gz")
으로 파일을 찾아 루프로 넘기는 경우

for file in "$FILES"
do
    ...
done

FILES에 공백 문자가 포함된 경우("/root/some path/somefile")
file에는 /root/some 과 path/somefile 이 넘어오게 된다.

이런 경우, find는 \n으로 각 파일패스를 구분하므로, 구분자를 바꾸어 준다.

FILES=$(find path -name "*.gz")
IFS=$'\n"
for file in "$FILES"
do
    ...
done


:

[BASH] rm -rf path/to/delete/*

CS/Shell/Perl/Python 2010. 8. 12. 14:02
path/to/delete 폴더 밑의 모든 파일,폴더를 삭제할 경우

#!/bin/bash
$folders="/path/to/delete"
rm -rf "$folder/*"

과 같이 /* 까지 quote 시키면 삭제되지 않는다. 
(*이 재해석 되는 것인지... 그렇다고 rm -rf '/path/to/delete/*' 로 quote를 해주어도 동작하지 않는것을 보면 globbing 문제 때문인것 같지는 않은데...)

#!/bin/bash
$folders="/path/to/delete"
rm -rf "$folder"/*

* 부분을 quote시키지 않은 경우 정상적으로 동작한다.

:

[SED] edit in place without backup

CS/Shell/Perl/Python 2010. 8. 11. 16:20

man page:
-i 
extension
: Edit files in-place, saving backups with the specified extension. 
: If a zero-length extension is given, nobackup will be saved. It is not recommended to give a zero-length extension when in-place editing files, asyou risk corruption or partial content in situations where disk space is exhausted, etc.

-i 를 사용할 경우 extension이 지정되어야 하므로
$ sed -i -e 's/string/sub/' file
과 같이 사용할 경우 extension이 없어 error가 발생한다.

따라서, 다음과 같이
$ sed -i '' -e 's/string/sub/' file
zero-length extension을 지정하여 백업 파일을 생성하지 않고 in place editing을 할 수 있다.
:

[BASH] Builtin: test, [

CS/Shell/Perl/Python 2010. 8. 5. 09:58
참조

Evaluate a conditional expression expr. Each operator and operand must be a separate argument. Expressions are composed of the primaries described below in Bash Conditional Expressions. test does not accept any options, nor does it accept and ignore an argument of -- as signifying the end of options. 

When the [ form is used, the last argument to the command must be a ]. 

Expressions may be combined using the following operators, listed in decreasing order of precedence. The evaluation depends on the number of arguments; see below. 

! expr
: True if expr is false. 

( expr )
: Returns the value of expr. This may be used to override the normal precedence of operators. 

expr1 -a expr2
: True if both expr1 and expr2 are true. 

expr1 -o expr2
: True if either expr1 or expr2 is true.


산술 비교

val1 -eq val2 
: 변수 val1과 변수 val2 같은 경우 true

val1 -ne val2 
: 변수 val1과 변수 val2 다른 경우 true

val1 -qt val2 
: 변수 val1이 변수 val2 보다 큰 경우 true

val1 -lt val2 
: 변수 val1이 변수 val2 보다 작은 경우 true

val1 -ge val2 
: 변수 val1이 변수 val2 보다 크거나 같은 경우 true

val1 -le val2 
: 변수 val1이 변수 val2 보다 작거나 가은 경우 true


파일 검사

-e 
: 존재하는 파일인 경우 true

-b 
: 파일이 존재하고 블록장치(플로피, 시디롬, ...)인 경우 true

-c 
: 파일이 존재하고 캐릭터 장치 파일인 경우 true

-d 
: 파일이 존재하고 디렉토리인 경우 true

-h
: 파일이 심볼릭 링크

-L
: 파일이 심볼릭 링크

-S
:파일이 소켓

-t
: 파일 디스크립터가 터미널 디바이스와 연관이 있음
: 스크립트의 표준입력([ -t 0 ])이나 표준출력([ -t 1 ])이 터미널인지 아닌지를 확인하는데 쓸 수 있습니다.

-f 
: 파일이 존재하고 보통 파일(디렉토리나 디바이스 파일이 아님)인 경우 true

-h 
: 파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우 true

-p 
: 파일이 존재하고 파이프인 경우 true

-s 
: 파일이 존재하고 0보다 큰 경우 true

-g 
: 파일이 존재하고 SetGID가 설정된 경우 true

-u 
: 파일이 존재하고 SetUID가 설정된 경우 true

-k 
: 파일이 존재하고 Sticky bit가 설정된 경우 true

-r 
: 파일이 존재하고 읽기 가능한 경우 true

-w 
: 파일이 존재하고 쓰기가 가능한 경우 true

-x 
: 파일이 존재하고 실행 가능한 경우 true

-O
: 자신이 소유자임

-G
: 그룹 아이디가 자신과 같음

-N
: 마지막으로 읽힌 후에 변경 됐음

file1 -nt file2
: file1 파일이 file2 파일보다 최신임

file1 -ot file2
: file1 파일이 file2 파일보다 예전것임

file1 -ef file2
: file1 파일과 file2 파일이 같은 파일을 하드 링크하고 있음

문자열 비교
-z string 
: 문자열의 길이가 0인 경우 true

-n string 
: 문자열의 길이가 0이 아닌 경우 true

string1 = string2 
: 문자열 string1과 string2가 일치하는 경우

string1 != string2 
: 문자열 string1과 string2가 일치하지 않는 경우

string : 문자열이 NULL이 아닌 경우

:

[BASH] 변수

CS/Shell/Perl/Python 2010. 7. 27. 14:42

원문 : 고급 Bash 스크립팅 가이드

1. 위치 매개 변수

$0, $1, $2, etc.
: 위치 매개변수로서, 명령어줄에서 스크립트로 넘겨지거나 함수로 넘겨지거나 set 명령어로 강제로 설정됨.

$#
: 명령어줄 인자의 갯수나 위치 매개변수들

$*
: 한 낱말로 표시되는 위치 매개변수들 모두

$@
: $*과 똑같지만 각 매개변수는 쿼우트된 문자열로 취급됩니다. 즉, 해석되거나 확장없이 있는 그대로 넘겨집니다. 그 결과로 각 인자는 각각이 서로 다른 낱말로 구분돼서 표시됩니다.


2. 내장 변수

$GROUPS
: 현재 사용자가 속해 있는 그룹. /etc/passwd에 적혀 있는 현재 사용자의 그룹 아이디 값을 보여줍니다.

$HOME
: 사용자의 홈 디렉토리로, 보통은 /home/username (예 9-10 참고)

$IFS
: 입력 필드 구분자
: 디폴트는 공백문자(빈칸, 탭, 뉴라인)지만 콤마로 구분된 데이타 파일을 파싱하려는 경우처럼 변경이 가능. $*는 $IFS의 첫번째 문자를 사용하는 것에 주의
ex)
$ bash -c 'set w x y z; IFS=":-;"; echo "$*"'
w:x:y:z

$PATH
:실행 파일의 경로, 보통은 /usr/bin/, /usr/X11R6/bin/, /usr/local/bin, 등등.

$PPID
: 어떤 프로세스의 부모 프로세스의 프로세스 아이디(pid)

$UID
: 사용자 아이디 값. /etc/passwd에 저장되어 있는 현재 사용자의 사용자 식별 숫자

$PS1
: 명령어줄에서 볼 수 있는 메인 프롬프트.

$PS2
: 2차 프롬프트로, 추가적인 입력이 필요할 때 ">" 로 표시됨.

$PS3
: 3차 프롬프트로 select 루프문에서 표시됨.

$PS4
: 4차 프롬프트로, 스크립트에 -x 옵션이 걸려서 실행될 때 스크립트의 매 줄마다 "+"로 표시됨.

$PWD
: 작업 디렉토리(현재 있는 디렉토리)


3. 특수 매개변수

$-
: 스크립트로 넘겨진 플래그들

$!
: 백그라운드로 돌고 있는 가장 최근 작업의 PID (process id)

$_
: 바로 이전에 실행된 명령어의 제일 마지막 인자로 설정되는 특수 변수.

$?
: 명령어나 함수, 스크립트 자신의 종료 상태.

$$
: 스크립트 자신의 프로세스 아이디로 보통 임시 파일 이름을 만들 때 사용.

:

[MAKE] Target

CS/Shell/Perl/Python 2010. 6. 4. 10:29
Internal Macro
원문 : KLDP

$*
: 확장자가 없는 현재의 목표 파일(Target)

$@
: 현재의 목표 파일(Target)

$<
: 현재의 목표 파일(Target)보다 더 최근에 갱신된 파일 이름

$?
:현재의 목표 파일(Target)보다 더 최근에 갱신된 파일이름

: