変数と引用符を使用するようにsedを取得できません

変数と引用符を使用するようにsedを取得できません

この行を置き換えるシェルスクリプトを作成します。

exec "$progdir/$program" ${1+"$@"}

そして:

exec qemu-arm -L /mnt/c/git/build/linux_arm7/build_arm7/sysroot "$progdir/$program" ${1+"$@"}

ファイルから。 /mnt/c/git/build/linux_arm7/build_arm7という名前の変数にありますBUILD_DIRECTORY。私が何をしようとしても(引用符、他の区切り文字)、常に置換の代わりに変数で終わります。たとえば、私はこれを試しました:

#!/bin/bash
sed_test()
{
    sed -i 's|exec "\$progdir\/\$program" \${1+"\$@"}|exec qemu-arm -L ${BUILD_DIRECTORY}\/sysroot "\$progdir\/\$program" \${1+"\$@"}|g' ${BUILD_DIRECTORY}/file
}

ファイルにこれを得ました:

exec qemu-arm -L ${BUILD_DIRECTORY}/sysroot "$progdir/$program" ${1+"$@"}

これを正しく行う方法は?

ベストアンサー1

  • ${BUILD_DIRECTORY}参照により変数の拡張が防止される
  • g最終不要
  • あなたはとても逃げました。

BUILD_DIRECTORY 変数にスペースがない場合は、次のようにします。

sed -i 's|exec "$progdir/$program" ${1+"$@"}|exec qemu-arm -L '${BUILD_DIRECTORY}'/sysroot "$progdir/$program" ${1+"$@"}|'  ${BUILD_DIRECTORY}/file

周囲の一重引用符に注意してください。${BUILD_DIRECTORY}

BUILD_DIRECTORYにスペースがある場合(たとえばlinux arm7)、リレー文字列を使用します(コマンド分割)。

sed -e 's|exec "$progdir/$program" ${1+"$@"}|exec qemu-arm -L BUILD_DIRECTORY/sysroot "$progdir/$program" ${1+"$@"}|'  
   -e "s|BUILD_DIRECTORY|${BUILD_DIRECTORY}|" 
   "${BUILD_DIRECTORY}/file"

生産する

exec qemu-arm -L /mnt/c/git/build/linux arm7/build_arm7/sysroot "$progdir/$program" ${1+"$@"}

おすすめ記事