답변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/test
POSIX에 의해 지정됨많은 쉘이 내장 기능으로도 제공하지만 이것이 바로 여러분이 찾을 수 있는 이유입니다. 이들의 존재는 다음 구조를 보장합니다.
[ "$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
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
[[ ]]
테스트를 위해 and 를 사용할 수도 있지만 (( ))
구문은 거의 동일하지만 and 와 동일하지는 않습니다.[
test
마지막으로 명령이 무엇인지 확인하려면 다음을 사용할 수 있습니다.
type -a command