Final.txt는 다음과 같습니다.
build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping/camping.design
src/aura/camping/camping.design-meta.xml
/aura/
해당 줄에 포함된 파일 만 바꾸고 싶습니다.src/aura/camping
다음 코드를 작성했지만 오류가 발생합니다.
echo replaceText ${\$CFILE//\$CFILE/"src/aura/"($(basename -- "$(dirname -- "$CFILE")"))}
line 62: ${\$CFILE//\$CFILE/"src/aura/"($(basename -- "$(dirname -- "$CFILE")"))}: bad substitution
이것은 ($(basename -- "$(dirname -- "$CFILE")
캠핑을 $CFILE
주고 src/aura/camping/camping.design
.
src/aura/camping/camping.design
하지만 그것은 대체 되지 않습니다src/aura/camping
function contains() {
local n=$#
local value=${!n}
for ((i=1;i < $#;i++)) {
if [ "${!i}" == "${value}" ]; then
echo "y"
return 0
fi
}
echo "n"
return 1
}
if [ -e final.txt ]
then
ARRAY=()
while read CFILE
do
echo Analyzing file `basename $CFILE`
case "$CFILE"
in
*.app) TYPENAME="AuraDefinitionBundle";;
*.cmp) TYPENAME="AuraDefinitionBundle";;
*.css) TYPENAME="AuraDefinitionBundle";;
*.evt) TYPENAME="AuraDefinitionBundle";;
*.js) TYPENAME="AuraDefinitionBundle";;
*.svg) TYPENAME="AuraDefinitionBundle";;
*.auradoc) TYPENAME="AuraDefinitionBundle";;
*.design) TYPENAME="AuraDefinitionBundle";;
*) TYPENAME="UNKNOWN";;
esac
if [ "$TYPENAME" == "AuraDefinitionBundle" ]
then
if [ $(contains "${ARRAY[@]}" $(basename -- "$(dirname -- "$CFILE")")) != "y" ]
then
echo baseFile from new method cFile $CFILE
ARRAY+=($(basename -- "$(dirname -- "$CFILE")"))
echo replaceText ${\$CFILE//\$CFILE/"src/aura/"($(basename -- "$(dirname -- "$CFILE")"))}
else
continue
fi
fi
done < final.txt
else
echo Change file not found!
fi
마지막으로 실행 cat final.txt | xargs -I {} cp --parents {} $1
되고 모든 파일이 campaign
폴더에서 다른 파일 경로로 복사되어야 한다고 생각합니다.
시험을 마친
echo baseFile from new method cFile $CFILE
FILENAME = "$CFILE"
ARRAY+=($(basename -- "$(dirname -- "$CFILE")"))
replace=$(basename -- "$(dirname -- "$CFILE")")
echo relaceWord $replace
echo replaceText ${FILENAME//$CFILE/$replace}
답변1
확장에서는 ${parameter/pattern/replacement}
매개변수 이름을 첫 번째 요소로 사용합니다. 따라서 foo=bar; echo "${foo/a/x}"
출력 .in bxr
은 유효한 인수가 아니므로 오류가 발생합니다. 콘텐츠에 대해 대체를 실행하려면 를 사용할 수 있습니다 .${\$CFILE//\$CFILE/"src/aura/"($(...))}
\$CFILE
CFILE
${CFILE/...}
"패턴" 섹션에서 백슬래시가 달러 기호를 이스케이프하므로 \$CFILE
리터럴 문자열이 발견됩니다 $CFILE
. 그런 다음 다시 using은 ${CFILE/$CFILE/...}
내용을 CFILE
바꿀 텍스트와 패턴으로 사용할 텍스트로 처리합니다. 변수 (*) 의 전체 내용을 대체합니다 . 이는 매개변수 없이 교체 부품을 작성하는 것과 동일하므로 여기서 무엇을 하는지 잘 모르겠습니다.
(*물론 자체적으로 일치하지 않는 glob이 아닌 한.)