Bash 쉘 스크립트에서 문자열 값을 반복하는 for 루프를 작성하십시오.

Bash 쉘 스크립트에서 문자열 값을 반복하는 for 루프를 작성하십시오.

forBash에서는 일부 루프 제어 변수가 i지정된 정수를 반복하는 루프를 작성하는 것이 가능하다는 것을 알고 있습니다 . 예를 들어, 1에서 10 사이의 정수를 인쇄하는 bash 쉘 스크립트를 작성할 수 있습니다.

#!/bin/bash

for i in {1..10}
do
 echo $i
done

문자열 목록을 제공하면 문자열인 루프 제어 변수를 반복할 수 있습니까? 예를 들어, fname파일 이름을 나타내는 문자열이 있다고 가정해 보겠습니다 . 각 파일 이름에 대해 일련의 명령을 호출하고 싶습니다. 예를 들어 다음과 같은 내용을 인쇄하고 싶을 수 있습니다 fname.

#!/bin/bash

for fname in {"a.txt", "b.txt", "c.txt"}
do
 echo $fname
done

즉, 첫 번째 반복에서는 fname값이 있어야 하고 fname="a.txt", 두 번째 반복에서는 fname값이 있어야 하는 fname="b.txt"식입니다. 불행하게도 위의 구문은 올바르지 않은 것 같습니다. 출력을 얻고 싶습니다.

a.txt

b.txt

c.txt

그러나 위의 코드를 시도하면 다음과 같은 결과가 나타납니다.

{a.txt,

b.txt,

c.txt}

변수의 값/내용을 반복적으로 변경할 수 있도록 올바른 구문을 결정하는 데 도움을 줄 수 있습니까 fname? 시간 내 주셔서 감사합니다.

답변1

올바른 구문은 다음과 같습니다.

#!/bin/bash

for fname in a.txt b.txt c.txt
do
  echo $fname
done

답변2

제 생각에는 이렇게 하셔야 할 것 같아요...

printf %s.txt\\n a b c

답변3

user13742가 언급했듯이논평bash, 합계로 배열을 사용할 수 있습니다 ksh.

#!/usr/bin/env bash

files_list=( "a.txt" "b.txt" "c and space.txt" )

for i in "${files_list[@]}"
do
    echo "$i"
    # do something else here,maybe
done

다음과 같이 작동합니다.

$ ./iterate_files_array.sh                                                      
a.txt
b.txt
c and space.txt

그러나 일부 셸(예 dash: /bin/shUbuntu)은 어레이를 지원하지 않습니다. 이 경우 다음 문서 구조를 사용할 수 있습니다.<<

#!/bin/sh

while IFS= read -r line
do
    echo "$line"
done << EOL
one.txt
two.txt
with space.txt
EOL

관련 정보