2013-03-24 2 views
-1

안녕하세요, Bash에서 변수 사용법을 배우고 이해하려고합니다. 어느 곳에서나 변수를 초기화하는 방법을 볼 수 있기 때문에 잘못되었거나 개념이 잘못되었습니다. 그러나 그 값을 사용하는 방법은 설명되어 있지 않습니다.Bash에서 변수 값 사용

예 : FILES이라는 변수가 있습니다.이 변수는 존재하는 경우 찾을 필요가있는 X 문자열 수를 제공합니다. 이런 식으로 뭔가 : 단 2를 가지고, 나는 파일이 존재하는 경우 1 일을보고해야

FILES="inf.txt program.c" 

(.txt 인과가 .c 사람을, 그들은 무작위로 예를 더 할 수있다).

지금, 제 문제는 각 문자열 또는 각 값을 새로운 순서로 지정하는 것입니다. 방금 1 문자열이라면, 나는 그것을 찾을 수 있다고 생각하지만, 몇몇은 그것이 bash에서 어떻게 이루어 졌는지 전혀 모른다.

그리고 파일이 있는지 확인하는 방법은 알고 있는데, [-r File] 또는 -e 또는 그 중 무엇이 아닌지 상기 변수의 값이 없습니다.

답변

0

당신은 for 루프 $ 파일 변수를 통해 루프 필요

for file in $FILES 
do 
[ -r "$file" ] && echo File $file exists and is readable || echo F*emphasized text*ile $file does not exists 
done 
+0

변수 $ FILES의 각 부분이 파일 인 방법은 무엇입니까? 어떻게 든 암묵적인가? 나를 위해, $ FILES의 각 부분은 String이지만 어쩌면 나는 여러 가지를 혼합하고 있습니다. – keont

+0

이제는 문자열입니다. 그러나이 문자열을 파일을 의미하는 연산과 함께 사용하면 문자열은 파일 이름으로 해석됩니다 (예 :'test -r'은 문자열을 파일 이름으로 해석합니다). –

+0

음, 고맙습니다. 매우 흥미 롭습니다. 작업 자체는 다소 간단합니다. 문제는 계속 진행되고 있습니다. 변수 $ FILE이 날짜 또는 다른 유형이고 날짜를 비교하는 연산을 수행했거나 정수를 비교하는 연산을 수행 한 경우 그 원리는 동일한 것입니다. – keont

1

bash에서이 작업을 수행하는 올바른 방법은 배열이 아닌 문자열을 사용하는 것입니다. 이름에 공백이 포함 된 파일이 있으면 어떻게됩니까?

$ FILES=("name with space.txt" inf.txt program.c) 
$ for f in "${FILES[@]}"; do 
> echo "$f" 
> done 

나는 루프의 본문에 $f를 인용의 중요성을 강조하기 위해 첫 번째 파일에 공백의 말도 안되는 숫자를 넣어. 동일한 코드를 실행하고 대신 echo $f (따옴표 제외)을 사용해보십시오.

이 시점에서 그들은 단지 문자열입니다. 이 bash 때문에

$ FILES=("name with space.txt" inf.txt program.c) 
$ for f in "${FILES[@]}"; do 
> if [ -f "$f" ]; then 
>  echo "$f is a file" 
> else 
>  echo "$f is not a file" 
> fi 
> done 

을하지만 (? 인수가 파일) bash는 같은 -f 연산자로, 파일 이름이 예상되는 상황에서 사용하지 않는 한 그들이 파일 이름을 경우 상관하지 않는다 만약 당신이 좋아하면 당신은 따옴표를 제거 할 수 있습니다, 그 표현으로

> if [[ -f $f ]]; then 

;하지 sh, 대신 test/[ 명령의 조건식을 사용한다 그들은 모두 [...]과 함께 필수 항목입니다 (즉, 코드는 따옴표없이 실행되지만 $f에는 공백이 포함되지 않은 경우에만 실행됩니다).