같은 것을 선호하는 이유는 지금이 :(())는 그냥 호기심
while [[ $number -lt 10 ]]
while (($number < 10))
이상 그들은 똑같은 일을하는 것처럼 보입니다. 나는 어쩌면 그들 중 하나 또는 아마도 이식 가능성에 대한 우려가
[[ ]]
과 관련하여 궁금합니다.
같은 것을 선호하는 이유는 지금이 :(())는 그냥 호기심
while [[ $number -lt 10 ]]
while (($number < 10))
이상 그들은 똑같은 일을하는 것처럼 보입니다. 나는 어쩌면 그들 중 하나 또는 아마도 이식 가능성에 대한 우려가
[[ ]]
과 관련하여 궁금합니다.
어느 쪽도 표준이 아니므로 이식성은 문제가되지 않습니다.당신이 단순한 비교를 수행하는 경우,
if [[ $number -lt 10 ]]
두 번째에서 $
을 (드롭 할 수있는 기능을 제외하고
if ((number < 10))
betwee 약간의 차이가 모든 문자열을 변수로 가정하고 역 참조하기 때문에) 및 가독성.
조건부을 결합 연산 및 비 산술 시험 때 [[...]]
을 선호 있습니다
if ((number*2 < 10-delta))
: 당신의 비교가 약간의 계산을 포함하는 경우
if [[ $number -lt 10 && $file = *.txt ]]
if ((number < 10)) && [[ $file = *.txt ]]
대 당신은 아마
((...))
를 선호
대 n eedlessly 복잡한
if [[ $((number*2)) -lt $((10-delta)) ]]
((
및 ))
은 모든 간격 제한을 적용하지 않는 한 당신은 내가 ((
및 ))
을 사용하여 선호 woud 모든 복잡한 산술 연산자하지만 [[
및 ]]
은 제한 비교 man test
에 정의 허용을 사용할 수 있습니다. 당신은 아주 잘 사용할 수 있습니다
while ((number<10))
또는
while ((number*2<10))
등
몇 시간 전[[테스트와 동일하지 않습니다. –
@depesz : 동의하지는 않지만 테스트에서 사용하는 연산자가 허용됩니다. – anubhava
예, [[]]은 테스트 기능에 * 제한되어 있지 않습니다. 더 많은 것을 할 수 있습니다. –
당신이 일반적이었다 당신이 프로그램을 "테스트"를 사용하고 비교의 어떤 종류를 가지고 싶어 "[".
그래서 당신 같은 표현했다 : 기본적으로if [ ..... ]; then
테스트 asciibetically 비교를, 당신은 수치 비교를 원한다면, 당신은 -lt/-gt 및 이와 유사한을 사용했다.
그러면 bash는 자체 테스트 엔진을 갖게되었습니다. 그것을 사용하려면 [[[. '비교가 떠들썩한 파티에서 자신을 수행 한 것을 제외하고,
if [[ ... ]]; then
와 동일한 기능을 수행하고, didn를 :
if [ ... ]; then
과 같이 다시 작성할 수 있습니다 :
그래서 동일한 구문 당신은 이전했다 테스트 프로그램의 fork/exec가 필요합니다.
이제 외부 프로그램을 호출하지 않으므로 숫자를 비교하는 다른 방법을 추가하는 것이 더 간단합니다. 그러므로 (())가 나타났다.
특정 이점이 있지만 일반적으로 간과되는 것은 수치 을 부과한다는 것입니다. 당신은 같은 것을 할 수 있다는 것을 의미
:
i=1
((i++))
echo $i # will return 2
길고도 짧은 이야기 - 비교를 위해, 그것은 많은를 중요하지 않습니다. 그러나 그것은 남자 bash에서 (()와 [[])에 대해 더 많은 것을 배우는 데 드는 돈입니다.
짧은 답변 : 그것은 가능의 경우'(())'_ALWAYS_가'[]'선호입니다 ...하지만 사람들의 상당수는 단순히 존재 모른다. –