이 작업을 수행하는 함수를 작성하려고 합니다.
$ test-function -u {local-path} {destination}
첫 번째 인수가 이면 -u
다음 2개의 인수를 업로드/복사/재동기화할 파일의 경로 및 대상으로 사용하는 함수를 실행합니다.
$ test-function -d {local-path} {destination}
첫 번째 인수가 -u
(또는 -d
)인 경우 다음 2개의 인수를 다운로드/복사/재동기화할 파일의 경로(현재 폴더에 있다고 가정)와 대상으로 사용하는 함수를 실행합니다.
해결책을 제안하는 답변을 찾았습니다.여기그리고여기. 그러나 내 함수는 .bash_profile
다음과 같은 오류를 반환합니다.
function test_func {
local a="$1"
local a="$2"
if ( a == "-u" ); then
echo "This means upload"
else
echo "This means download"
fi
}
alias test-function="test_func"
그 다음에:
$ test-function -u
-bash: a: command not found
This means download
$ test-function -d
-bash: a: command not found
This means download
코드를 다음과 같이 변경하면:
if [[a == "-u"]]; then
...
때로는 다음과 같이 진행됩니다.
$ test-function -u
-bash: [[a: command not found
This means download
내가 찾은 답변 중 하나를 기반으로 코드를 변경하는 경우:
if ((a == "-u")); then
...
때로는 다음과 같이 진행됩니다.
line 53: syntax error near unexpected token `}'
이 오류는 double 과 관련이 있는 것 같습니다 ((...))
. 어떻게 하나요?
답변1
오류는 다음과 같습니다.
if ( a == "-u" ); then
echo "This means upload"
else
echo "This means download"
fi
구성 if
에는 true 또는 false로 평가되는 표현식이 필요합니다. 예를 들어 명령( if ls; then echo yes;fi
) 또는 테스트 구조입니다. 테스트 구성을 사용하려고 하는데 테스트 연산자( )를 사용하는 대신 [
괄호를 사용합니다.
괄호는 서브쉘을 엽니다. 따라서 이 표현은 "인수를 사용하여 서브셸에서 명령을 실행합니다 ( a == "-u" )
. 원하는 것은 다음과 같습니다.a
==
"-u"
if [ "$a" = "-u" ]; then ## you also need the $ here
echo "This means upload"
else
echo "This means download"
fi
[[ ]]
또는 에서 작동하는 이식 불가능한 구성을 사용하려면 bash
후행 공백을 추가해야 합니다 [[
.
if [[ "$a" == "-u" ]]; then
echo "This means upload"
else
echo "This means download"
fi
if [[a == "-u" ]]
셸을 [[a
단일 명령으로 읽으려고 했지만 실패했습니다.
마지막으로 이 (( ))
구조는 이식성이 없지만 산술 평가를 위해 bash(및 일부 다른 셸)에서 작동합니다. 에서 man 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".
따라서 이 경우에는 사용하고 싶은 것이 아닙니다. 이 모든 것을 종합하면 다음과 같은 것을 원합니다.
function test_func {
local a="$1"
if [ "$a" = "-u" ]; then
echo "This means upload"
else
echo "This means download"
fi
}
alias test-function="test_func"
답변2
공식 구문을 사용하고 [
....을 ]
사용하여 test
호출해 보세요.
( ... )
서브셸 만들기(( ))
대신 숫자를 선호하는 ksh 특정 내부 산술 표현식입니다.-u