将完整组件从一个文件夹复制到另一个文件夹,引发错误的替换

将完整组件从一个文件夹复制到另一个文件夹,引发错误的替换

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}"会输出bxr.在 中 ${\$CFILE//\$CFILE/"src/aura/"($(...))}\$CFILE不是有效参数,因此您会收到错误。如果您想对 的内容运行替换CFILE,您可以使用${CFILE/...}.

请注意,在“模式”部分中,反斜杠转义了美元符号,因此\$CFILE将查找文字字符串$CFILE。话又说回来, using${CFILE/$CFILE/...}会将 的内容CFILE既作为要进行替换的文本,又作为要用作模式的文本。它将替换变量(*)的全部内容。这与完全不带参数地写出替换部分是一样的,所以我不太确定你在这里做什么。

(* 当然,除非它是一个与自身不匹配的 glob。)

相关内容