bash: 두 개의 문자열 변수를 반복하여 심볼릭 링크 생성

bash: 두 개의 문자열 변수를 반복하여 심볼릭 링크 생성

저는 두 개의 bash 변수를 생성했는데 둘 다 문자열 라인입니다.

$oldfilenames처럼 보인다

path/old-filename-1.txt
path/old-filename-2.txt
path/old-filename-3.txt
path/old-filename-4.txt
...

그리고

$newfilenames처럼 보인다

new-filename-1.txt
new-filename-2.txt
new-filename-3.txt
new-filename-4.txt
...

이 두 변수를 사용하여 내 디렉터리에 기호 링크를 생성하고 싶습니다.

두 변수의 길이는 동일합니다. 나는 이런 일을하고 싶습니다 :

for x in $oldfilenames; y in $newfilenames; do 
  ln -s $x $y
done

나는 이것이 올바른 구문이라고 생각하지 않으며 작동시킬 수 없습니다.

답변1

개행으로 구분된 문자열이 일련의 파일 이름을 처리하는 좋은 방법인지 확실하지 않습니다(배열 사용을 고려할 수도 있음).

그러나 이것을 고려하면 다음과 결합됩니다.여기 문자열이 있습니다read번호가 매겨진 파일 설명자에서 읽는 내장 기능을 사용하면 다음과 같이 작동할 수 있습니다.

while IFS= read -r -u3 x; IFS= read -r -u4 y; do 
  echo ln -s "$x" "$y"
done 3<<<"$oldfilenames" 4<<<"$newfilenames"

[ echo테스트 목적으로 포함됨].

답변2

두 개의 목록을 동시에 반복하는 기본 제공 생성자는 없습니다. 명령문 for은 목록을 반복합니다.

배열과 함께 쉘을 사용하는 경우,목록을 개행으로 구분된 문자열로 저장하지 말고 대신 배열을 사용하십시오..

oldfilenames및 배열인 경우 newfilenames배열 인덱스를 반복할 수 있습니다.

for ((i=0; i<${#oldfilenames[@]}; i++)); do
  x=${oldfilenames[$i]}; y=${newfilenames[$i]}; …
done

줄 바꿈으로 구분된 문자열이 있어야 하는 경우 첫 번째 줄을 한 번에 한 줄씩 제거할 수 있습니다.

nl='
'
oldfilenames=${oldfilenames%"$nl"}
while [ -n "$oldfilenames" ]; do
  x=${oldfilenames%%"$nl"*}; y=${newfilenames%%"$nl"*}
  oldfilenames=${oldfilenames#*"$nl"}; newfilenames=${newfilenames#*"$nl"};
done

관련 정보