실행 파일에서 대괄호의 목적은 무엇입니까

실행 파일에서 대괄호의 목적은 무엇입니까

"[" 라는 실행 파일이 있는 것을 확인했습니다 /usr/bin. 그 목적은 무엇입니까?

여기에 이미지 설명을 입력하세요.

답변1

대부분의 경우 [이는 와 동등한 쉘 내장입니다 test. 그러나 와 마찬가지로 test독립 실행형 실행 파일로도 존재합니다. 이것이 /bin/[바로 여러분이 보는 것입니다. 다음 명령을 사용하여 이를 테스트할 수 있습니다 type -a [(Arch Linux 시스템에서는 실행 bash).

$ type -a [
[ is a shell builtin
[ is /bin/[

따라서 내 시스템에는 두 가지가 있습니다 [. 내 쉘의 내장 파일과 다음 /bin위치에 기록된 .executable 파일입니다 man test.

TEST(1)                          User Commands                         TEST(1)

NAME
       test - check file types and compare values

SYNOPSIS
       test EXPRESSION
       test

       [ EXPRESSION ]
       [ ]
       [ OPTION

DESCRIPTION
       Exit with the status determined by EXPRESSION.

[ ... ]

위에서 인용한 매뉴얼 페이지에서 볼 수 있듯이 test[는 동일합니다. 그리고 는/bin/[/bin/testPOSIX에 의해 지정됨많은 쉘이 내장 기능으로도 제공하지만 이것이 바로 여러분이 찾을 수 있는 이유입니다. 이들의 존재는 다음 구조를 보장합니다.

[ "$var" -gt 10 ]  && echo yes

실행되는 셸에 내장 기능이 없더라도 [작동합니다 . 예를 들면 다음과 같습니다 tcsh.

> which [
/sbin/[
> set var = 11
> [ "$var" -gt 10 ]  && echo yes
yes

답변2

쉘 스크립트의 조건부 테스트에 사용됩니다. 이 프로그램의 다른 이름은 다음과 같습니다 test.

if [ 1 -lt 2 ]; then ...

이는 쉘 구문처럼 보이지만 그렇지 않습니다. 일반적으로 [쉘 내장 명령이지만 대안으로 외부 명령으로 존재할 수도 있습니다.

의 "조건식" 블록을 참조하세요 man bash.

답변3

[같은 명령으로 test. 일부 *nix 시스템에서는 하나가 다른 시스템에 대한 링크일 뿐입니다. 예를 들어 다음을 실행하는 경우:

strings /usr/bin/test 
strings /usr/bin/[

동일한 출력이 표시됩니다.

대부분의 sh-shells/posix-shells에는 내장 명령 [test명령이 포함되어 있습니다. 에 대해서도 마찬가지입니다 echo. /bin/echo대부분의 쉘에는 명령과 내장 기능이 있습니다. 이것이 때때로 echo다른 시스템에서 상황이 다르게 작동하는 것처럼 느끼는 이유입니다 .

test아니면 [그냥 종료 코드를 반환 0하거나 1. 테스트가 성공하면 종료 코드는 0입니다.

# you can use [ command but last argument must be ] 
# = inside joke for programmers 
# or use test command. Args are same, but last arg can't be ] :)
# so you can't write 
#    [-f file.txt] because [-f is not command and last argument is not ]
# after [ have to be delimiter as after every commands
[ -f file.txt ] && echo "file exists" || echo "file does not exist"
test -f file.txt && echo "file exists" || echo "file does not exist"
[ 1 -gt 2 ] && echo yes || echo no
test 1 -gt 2  && echo yes || echo no
# use external command, not builtin
/usr/bin/[ 1 -gt 2 ] && echo yes || echo no

[다음을 사용할 수도 있습니다 if.

if [ -f file.txt ] ; then
  echo "file exists" 
else 
  echo "file does not exist"
fi
# is the same as
if test -f file.txt  ; then
  echo "file exists" 
else 
  echo "file does not exist"
fi

ifif그러나 종료 코드를 테스트하기 위해 모든 명령에 이를 사용할 수 있습니다 . 예를 들어:

cp x y 2>/dev/null && echo cp x y OK ||  echo cp x y not OK

또는 다음을 사용하십시오 if.

if cp x y 2>/dev/null ; then
   echo cp x y OK
else
   echo cp x y not OK
fi

test다음 명령을 사용하여 변수에 저장된 종료 코드를 테스트하면 동일한 결과를 얻을 수 있습니다 stat.

cp x y 2>/dev/null 
stat=$?
if test "$stat" = 0 ; then
   echo cp x y OK
else
   echo cp x y not OK
fi

[[ ]]테스트를 위해 and 를 사용할 수도 있지만 (( ))구문은 거의 동일하지만 and 와 동일하지는 않습니다.[test

마지막으로 명령이 무엇인지 확인하려면 다음을 사용할 수 있습니다.

type -a command

관련 정보