bash - 二重引用符に一重引用符を追加する

bash - 二重引用符に一重引用符を追加する

提供された引数の変更中にエミュレータで特定のプログラムを実行するためのスクリプトを作成していますが、bashが二重引用符の周りに一重引用符を挿入してエミュレータがクラッシュするという問題が発生しました。これが起こらないようにするにはどうすればよいですか?

スクリプト

#!/bin/bash
#./matrix_sim MM1.x86 1024 X86 gem5.opt

PROGRAM=$1
ARGUMENT=$2
ARCHI=$3
TARGET=$4

./gem5/build/$ARCHI/$TARGET gem5/configs/example/se.py -c ./$PROGRAM -o \"$ARGUMENT\"

このスクリプトを実行すると、実際の出力は次のようになります。

./gem5/build/X86/gem5.opt gem5/configs/example/se.py -c ./MM1.x86 -o '"2"'

しかし、私が本当にしたいことはこれです。

./gem5/build/X86/gem5.opt gem5/configs/example/se.py -c ./MM1.x86 -o "2"

出力から単一のティックを削除するにはどうすればよいですか?

ベストアンサー1

Bashは文字列に一重引用符を追加しません。一重引用符が追跡された出力を視覚的に明確にする方法set -x。 Bashは、set -xシェル特殊文字(スペースと)を含む文字列の周囲に一重引用符を配置して、視覚的!"#$&\()*;<>?[\]^`{|}~に明確な出力を生成します。ここでは a を含む引数をとるコマンドに従うので、bash はシェルではなく文字列のリテラル文字であることを"明確にするために、一重引用符を使用してそれを印刷します。ソース文法の特定の文字。"

欲しくないと思います。二重引用符議論から。だから放置しないでください。

変数拡張の周りに二重引用符を使用する必要がありますが、シェル構文では、二重引用符文字が文字列に入るように引用符で囲まれた二重引用符を配置するのではなく、二重引用符にすぎません。

"./gem5/build/$ARCHI/$TARGET" gem5/configs/example/se.py -c "./$PROGRAM" -o "$ARGUMENT"

おすすめ記事