bash - 文字をエスケープする機能?

bash - 文字をエスケープする機能?

一部のタスクを自動化しようとしていますが、スクリプトに引数として渡された値をエスケープする問題に直面しています。

myScript.sh

#!/bin/bash

loadPatch -name $1

$1最初のパラメータは、「p12.9.5-bug34」などの値を持つことができます。

次のように実行

myScript p12.9.5-bug34

結果がない成功したかどうかの出力を確認しましたが、echo $?必要なアクションは発生しませんでした。

$1スクリプトのテストをこの実際の値に置き換えて、期待どおりに機能します。loadPatch受信したパラメータを確認するために印刷ステートメントを配置することはできません。

したがって、ここにいくつかのエスケープの問題があると仮定し、パラメータを使用する前にパラメータをエスケープするために使用できる関数/ユーティリティがあるかどうかを知る必要があります。

他のエラーが見つかったら教えてください。

ベストアンサー1

他の人がこのタイトルを検索できるので、この質問に答えてください。

  • zshのみ:print -r -- ${(q)var} ${(qq)var} ${(qqq)var} ${(qqqq)var} さまざまな種類の参照に使用されます。
  • ksh93、zsh または bash:printf %q "$var"
  • BusyBox(および上記のすべての項目)

    vars を使用すると、ash、bash、ksh の違いがなくなります。

    q1="'"
    q2="'\''"
    printf '%s\n' "'${var//$q1/$q2}'"
    

    ダッシュと以前のシェル(${var//pat/str}が見つからないシェル)にはありません。

  • 一番携帯していいですか?

    printf "'%s'\n" "$(printf '%s' "$var" | sed "s/'/'\\\\''/g")"
    
    Or
    
    printf '%s\n' "$var" | sed "s/'/'\\\\''/g; 1s/^/'/; \$s/$/'/"
    

改善を歓迎します!

おすすめ記事