あるフォルダから別のフォルダにアセンブリ全体をコピーすると誤った置換が発生する

あるフォルダから別のフォルダにアセンブリ全体をコピーすると誤った置換が発生する

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}"出力.inbxrは有効な引数ではないため、エラーが発生します。コンテンツに対して置換を実行するには、を使用できます。${\$CFILE//\$CFILE/"src/aura/"($(...))}\$CFILECFILE${CFILE/...}

「パターン」セクションでは、バックスラッシュがドル記号をエスケープするため、\$CFILEリテラル文字列が見つかります$CFILE。その後、再度 using は、${CFILE/$CFILE/...}内容をCFILE置き換えるテキストとパターンとして使用するテキストとして扱います。変数(*)の内容全体を置き換えます。これはパラメータなしで交換部品を作成するのと同じです。ここで何をするのかわかりません。

(*もちろんそれ自体が一致しないglobではない限り。)

おすすめ記事