태그 보관물: test

test

대괄호 실행 파일의 목적은 무엇입니까 파일이 /usr/bin있습니다. 그 목적은

에 “[“이라는 실행 파일이 /usr/bin있습니다. 그 목적은 무엇입니까?

여기에 이미지 설명을 입력하십시오



답변

대부분의 경우 [셸 내장이며에 해당합니다 test. 그러나와 같이 test독립 실행 형 실행 파일로도 존재합니다 /bin/[. 다음을 사용하여이를 테스트 할 수 있습니다 type -a [(Arch Linux 시스템에서 실행 bash).

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

그래서 내 시스템에는 [쉘의 내장과에있는 실행 파일이 /bin있습니다. 실행 파일은 다음에 문서화되어 있습니다 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/test명령하는 POSIX에 의해 지정된 당신이 많은 껍질은 또한 내장 명령로를 제공한다는 사실에도 불구하고 그들을 찾을 수 있습니다 이유입니다. 그들의 존재는 다음과 같은 구성을 보장합니다.

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

그것들을 실행하는 쉘이 [내장되어 있지 않아도 작동합니다 . 예를 들면 다음과 tcsh같습니다.

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

답변

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

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

그것은 쉘 문법처럼 보이지만 그렇지 않습니다. 일반적으로 [쉘은 내장되어 있지만 대체는 외부 명령으로 존재합니다.

의 “조건부 표현”블록을 참조하십시오 man bash.


답변

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

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

당신은 같은 출력을 볼 수 있습니다.

대부분의 sh-shell / posix-shell에는 내장 [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

그러나 if모든 명령에 사용할 수 있으며 if종료 코드를 테스트하기위한 것입니다. 예를 들면 다음과 같습니다.

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

당신은 또한 사용할 수 있습니다 [[ ]](( ))테스트,하지만 사람들은없는 동일로 [test거의 동일한 구문을에도 불구하고, :

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

type -a command

답변