シェルスクリプト関数でawk $変数をどのようにエスケープする必要がありますか?

シェルスクリプト関数でawk $変数をどのようにエスケープする必要がありますか?

シェルスクリプト関数でawkを使用しようとしていますが、awk変数($ 4)を正しくエスケープする方法を示す参照が見つからないようです。関数内では、関数に渡された4番目の項目(空)で連続的に置き換えられます。


iHealthGetFile()
{
    fileID=$(cat qkViews/${dir}iHealth-Files.json|grep -B5 '${1}'|grep id|awk '{print $4}'|sed 's/,//g; s/\"//g')
    echo $fileID
    echo "Retrieving file $1 as $fileID from ID: $ID"
}

(免責事項:はい、おそらくパイプコマンドを使用して他のことを行うことができます...しかし、私の主な目標はまず$ 4脱出を見つけることです。)

ベストアンサー1

私が知る限り、コンテキストデータはなく、エラーはコードにはありませんが、リテラルの4文字を見つけるawk最初のコードにあります。私はこれが関数に渡された最初の引数だと思います。grep${1}

あなたのコードをいくつか修正しました。不要なスペースを本当に削除するには、echo $fileID変数の周りに追加した二重引用符を削除する必要があります。

また、複数のグローバル変数を使用しました。ローカル変数($1)とグローバル変数($dirおよび$ID)を混在させることは特に良いコーディング習慣ではありませんが、スクリプトには実用主義が必要な場合があります。

iHealthGetFile()
{
    fileID=$(
        grep -B5 "$1" "qkViews/${dir}iHealth-Files.json" |
        awk '/id/ {print $4}'|
        tr -d ',"'
    )
    echo "$fileID"
    echo "Retrieving file $1 as $fileID from ID: $ID"
}

おすすめ記事