루프 (bash)를 통해 변수를 생성하고 값을 할당


12

bash 변수를 만들고 루프를 통해 값을 할당하는 방법이 있습니까?

다음과 같은 내용이 있습니다.

#!/bin/bash

c=0
for file in $( ls ); do
    var"$c"="$file";
    let c=$c+1;
done

편집 : @Costas 및 @mdpc에게 목록에 대한 나쁜 대안이 될 것이라고 지적 해 주셔서 감사합니다. 문제는 이론적 인 것입니다.


1
참고 : 설정으로 현재 프로세스에서만 변수를 변경 / 수정 / 할당 할 수 있으며 명령으로 실행할 경우 상위 프로세스가 아님을 유의하십시오. '.'를 사용하여 파일을 소싱 할 수 있습니다. 명령 (EX :. new_vars)을 사용하여 현재 프로세스 내에서이를 수행하십시오.
mdpc

그러나 위의 내용은 실제로 작동하지 않습니다. var"$c"그것을 끊는다. @Costas의 답변은 단일 목록 변수에 여러 값을 할당하는 방법을 보여줍니다-변수를 실제로 루프 로 생성 할 수 있는지 이론적으로 묻습니다 .
toxefa

흠 ... 왜 그렇게 복잡한 지, 새로운 변수를 사용하면 아무런 어려움없이 변수를 만듭니다.
mdpc

답변:


14

다음과 같이 eval 을 절대적으로 사용할 수 있습니다 .

c=0
for file in $( ls ); do
    eval "var$c=$file";
    c=$((c+1));
done

이 코드는 변수 이름이 var0, var1, var2, ... 인 변수를 만듭니다. 나는 당신이 배열을 사용하여 그것을하고 싶은 좋은 이유가 있다고 가정합니다 ...


5

가능하다면 배열을 의미합니다. 값을 할당하는 몇 가지 방법이 있습니다

먼저:

c=0
for file in $( ls ); do
    var[$c]="$file";
    c=$(($c+1));
done

둘째:

c=0
for file in $( ls ); do
    var[c++]="$file";
done

제삼:

for file in $( ls ); do
    var[${#var}]="$file";
done

네번째:

var=( $(ls) )

다섯 번째

...

  1. 사용할 필요가 없으며 모든 파일을 ls넣습니다.*
  2. 표시 내부 []$생략 할 수 있습니다

감사합니다; 내 질문은 실제로 실제보다 더 이론적입니다. 그러나 echo $var위에 나열된 명령을 사용하면에서 첫 번째 파일 'listed'만 가져옵니다 ls. 내가 뭔가 잘못하고 있습니까?
toxefa

1
사용해야하는 모든 배열을 출력하려면 echo ${var[*]}(또는 ${var[@]}) 단일 요소를처럼 호출 할 수 있습니다 echo ${var[1]}. 참고 : $var동일합니다${var[0]}
Costas

1
@ py4on 다른 방법은 루프를 사용하는 것입니다 :for v in "${var[@]}";do echo $v;done
Costas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.