Bash는 문자열 목록을 반복합니다.

Bash는 문자열 목록을 반복합니다.

이 bash 스크립트가 있습니다.

for opt in string1 string2 string3 ... string99
do somestuff

작동하지만 명시적인 문자열 목록을 실제로 다음과 같은 모든 문자열이 포함된 파일로 바꾸고 싶습니다.

strings=loadFromFile
for opt in $strings
do somestuff

어떻게 해야 합니까?

답변1

while read VAR각 입력 줄을 처리하므로 아마도 여기가 가장 좋을 것입니다. 다음과 같은 파일에서 리디렉션할 수 있습니다.

while IFS= read -r THELINE; do
  echo "..$THELINE"
done </path/to/file

이렇게 하면 ".."이 앞에 붙은 각 줄이 표시됩니다.

귀하의 사례의 경우 :

while IFS= read -r opt; do
  #somestuff $opt
done </path/to/file

바라보다"IFS=;" 대신 "IFS= 읽기"가 자주 사용되는 이유는 무엇입니까?설명을 위해.

답변2

while IFS= read -r opt
do 
    some_stuff
done < file_with_string

바라보다"IFS=;" 대신 "IFS= 읽기"가 자주 사용되는 이유는 무엇입니까?설명을 위해.

답변3

이것이 while IFS= read -r line; do ...; done < aFile최선의 대답이다

문자열에아니요또는 공백을 포함하면 \[*?할 수 있습니다

for word in $(< aFile); do something; done

$(< file)파일을 읽는 bash의 기능입니다( 와 유사 cat하지만 새 프로세스를 생성하지 않음).

답변4

나의 충고:

cat INPUTFILE| {
  declare -a LINES
  mapfile -t LINES
  for line in "${LINES[@]}"
  do
    somestuff
  done
}

관련 정보