문자열 패턴의 루프 변수 바꾸기

문자열 패턴의 루프 변수 바꾸기

파일 이름 배열을 반복하고 절대 경로 내의 파일 이름을 바꾸려고 합니다. 코드는,

#!/bin/bash
jsArray=(moment.js datatable.js jquery.js jquery.tmpl.js dt_jq_ui.js report_app.js)
for f in "/path/to/res/${jsArray[@]}.js";
do
  echo "$f"
done

그것은 돌아오고,

/path/to/res/moment.js
datatable.js
jquery.js
jquery.tmpl.js
dt_jq_ui.js
report_app.js.js

첫 번째 요소에만 접두사가 있고 마지막 요소에만 접미사가 있는 이유는 무엇입니까?

이런 글을 기대했는데,

/path/to/res/moment.js
/path/to/res/datatable.js
..................
/path/to/res/report_app.js  

답변1

Bash에게 다음과 같이 말했기 때문입니다.

~$ echo "/path/to/res/${jsArray[@]}.js"
/path/to/res/moment.js datatable.js jquery.js jquery.tmpl.js dt_jq_ui.js report_app.js.js

긴 밧줄을 주면 됩니다. 당신이하고 싶은 일은 다음과 같습니다

~$ for f in "${jsArray[@]}.js"
     do echo "/path/to/res/$f"
   done
/path/to/res/moment.js
/path/to/res/datatable.js
/path/to/res/jquery.js
/path/to/res/jquery.tmpl.js
/path/to/res/dt_jq_ui.js
/path/to/res/report_app.js.js

답변2

이것이 당신이 제공하는 루프이기 때문입니다.

$ jsArray=(moment.js datatable.js jquery.js jquery.tmpl.js dt_jq_ui.js report_app.js)
$ echo "/path/to/res/${jsArray[@]}.js"
/path/to/res/moment.js datatable.js jquery.js jquery.tmpl.js dt_jq_ui.js report_app.js.js

또는 더 간단한 예를 들면 다음과 같습니다.

$ arr=(a b c );
$ for f in "foo ${arr[@]} bar"; do echo "$f"; done
foo a
b
c bar

문자열, 배열 및 다른 문자열이 제공됩니다. 쉘이 모든 요소에 문자열을 추가하는 이유는 무엇입니까? 인쇄 중이에요,,, string말씀하신 대로요.arraystring

각 요소에 접두사와 접미사를 추가하려면 다음을 수행하십시오.

$ for f in "${jsArray[@]}";
do
  echo "/path/to/res/$f.js"
done
/path/to/res/moment.js.js
/path/to/res/datatable.js.js
/path/to/res/jquery.js.js
/path/to/res/jquery.tmpl.js.js
/path/to/res/dt_jq_ui.js.js
/path/to/res/report_app.js.js

관련 정보