나는 알아 차렸다이 문제한 응답자는 이중 괄호를 사용했고 다른 응답자는 대괄호를 사용했습니다.
if (( $(fileSize FILE1.txt) != $(fileSize FILE2.txt) )); then
...
if [ $(fileSize FILE1.txt) != $(fileSize FILE2.txt) ]; then
이전에는 이중 괄호를 본 적이 없습니다. 인터넷 검색도 도움이 되지 않았습니다. 그것들은 정확히 같은 것을 의미합니까? 이식성이 어떤 차이를 가져오나요? 다른 것보다 하나를 선택하는 이유는 무엇입니까?
답변1
bash
맨페이지 에서 :
((expression))
The expression is evaluated according to the rules described below under ARITHMETIC EVALUATION. If the value of the expression is
non-zero, the return status is 0; otherwise the return status is 1. This is exactly equivalent to let "expression".
[[ expression ]]
Return a status of 0 or 1 depending on the evaluation of the conditional expression expression. Expressions are composed of the
primaries described below under CONDITIONAL EXPRESSIONS. Word splitting and pathname expansion are not performed on the words
between the [[ and ]]; tilde expansion, parameter and variable expansion, arithmetic expansion, command substitution, process sub‐
stitution, and quote removal are performed. Conditional operators such as -f must be unquoted to be recognized as primaries.
(( ))
예를 들어 수학적 비교와 비트 비교를 수행하는 것은 물론 [[ ]]
더 추상적인 비교(AND)를 수행하는 데 사용할 수 있습니다.test file attributes and perform string and arithmetic comparisons
touch test;
if [ -e test ]; then
echo test exists
else
echo test does not exist
fi