2010-02-22 3 views
7

if 문에 단항 연산자를 여러 개 사용할 수 있습니까? 오류가 발생하는 코드 스 니펫은 다음과 같습니다.bash : if 문에 다중 단항 연산자

여기에서 코드를 수정하십시오.

if [ -f $input_file ] -a [ -f $output_file ] -a [ -f $log_file ] ] 
then 
### Some Code here 
fi 

감사 키란

답변

10
if [ -f "file1" -a -f "file2" -a "file3" ]; then 
    #some code 
fi 
+0

Magic처럼 작동합니다. 빠른 응답을 주셔서 감사합니다. – Kiran

1

[은 명령의 if 성명의 일부입니다. 따라서 적절한 인수를 각각 잘못 전달하는 대신 전달해야합니다.

if [ arg1 arg2 arg3 arg4 ... ] 
then 
+0

Cygwin 환경에서 C : \ cygwin \ bin \\ [. exe. 이 폴더를 처음으로 들여다 보는 정말 이상한 느낌. – Boldewyn

+0

대부분의 리눅스 배포판에있는'/ usr/bin' 명령과 유사하지만,'['는 일반적으로 bash 내장 명령입니다. –

4

test ...에 대한 바로 가기로 [ ... ] 연산자를 볼 수 있습니다. 옵션은 같은 방식으로 사용됩니다.

따라서 귀하의 경우에는 ghostdog74 방법을 쓰거나 수 중 하나 배시의 이중 브라켓을 사용하는 경우

if [ -f $input_file ] && [ -f $output_file ] && [ -f $log_file ] 
then 
### Some Code here 
fi 
5

, 당신은이 작업을 수행 할 수 있습니다

if [[ -f "$input_file" && -f "$output_file" && -f "$log_file" ]] 

내가 청소기 찾을 수있는 여기에 표시된 다른 옵션보다 읽기 쉽습니다 (하지만 주관적입니다). 그러나 그것은 other advantages입니다.

그리고 ghostdog74과 같이 항상 파일 이름을 포함하는 변수를 인용해야합니다.

+0

BASH가 이중 대괄호로 WordSplitting을 수행하지 않기 때문에 이중 대괄호를 사용하는 경우 파일 이름을 포함하는 변수를 인용 할 필요가 없습니다. http://mywiki.wooledge.org/BashFAQ/031 참조 – Cliff