답변:
대부분의 경우 [
셸 내장이며에 해당합니다 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
sh
있다 dash
그러나 나는 구조 시스템의 사용을 생각 /bin/sh
비지 박스 없습니다. 확실합니까?
쉘 스크립트의 조건 테스트에 사용됩니다. 이 프로그램의 다른 이름은 다음과 같습니다 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
cmp /usr/bin/[ /usr/bin/test
해시를 사용 하거나 해시 sha256sum /usr/bin/[ /usr/bin/test
하지 않아야 strings
합니다. 내 시스템 (openSUSE Tumbleweed) BTW에서 동일하지 않습니다 (이유).
[
내장 누구의 저자를 추가하지 않기로 결정 단지 쉘이다.tcsh
없는[
예를 들어 내장을.