拡張変数を使用したコマンドの解析

拡張変数を使用したコマンドの解析

何かをテストしようとしましたが、何を試しても正しく把握できなかったため、私は愚かなのかわかりません。

デフォルトでは、文字列をipa-getcertの保存後パラメータとして解析する必要があります。これには、証明書が更新された年を含める必要があります。これは、証明書を要求するためにスクリプトが一度実行され、現在の年を使用できることを意味します(単純)。ただし、ipa-getcertが証明書を更新すると、post-save引数でコマンドが実行されます。この場合、更新年を使用する必要があります。発行された証明書の完全な文字列を取得する方法(保存後のオプション[-C]を含む)は次のとおりです。

sudo ipa-getcert request -N $CERT_CN -K HTTP/$CERT_CN -k /etc/ssl/private/${CERT_CN}.key -f /etc/ssl/certs/${CERT_CN}.crt \
-D $CERT_CN -C "$INST_CERT -n ${CERT_NAME}_"'$(date +"%Y")'" $INST_OPTS $PAN_MGMT"

これをテストするために、次のことを試しましたが、日付は拡張されませんでした。 ipa-getcertを使用するよりもこれをテストするより良い方法はありますか?

$ txt="The year is: "
$ echo $txt$(date +"%Y")
The year is: 2023
$ echo $txt'$(date +"%Y")'
The year is: $(date +"%Y")
$ echo $(echo $txt'$(date +"%Y")')
The year is: $(date +"%Y")

しかし、エコーされた文字列はそうです。したがって、画面に印刷されなくても一重引用符が残っているようです。

$ echo The year is: $(date +"%Y")
The year is: 2023

間違いなくここで些細なことは抜けました。

[編集:]しかし、次はうまくいきますが、たぶん私は妄想的なものかもしれませんか?

$ mkdir $(date +"%Y")
$ test2="ll "'$(date +"%Y")'
$ echo $test2
ll $(date +"%Y")
$ eval $test2
total 8
drwxrwxr-x  2 user group 4096 Apr 24 20:01 ./
drwxr-xr-x 13 user group 4096 Apr 24 20:01 ../

ベストアンサー1

シェルはシェル構文の拡張結果を解析しません。これはプレーンテキスト置換ではありません。これは、引用符、その他の拡張、シェル演算子、およびシェルキーワードの場合にも当てはまりますが、拡張結果では認識されません。したがって、変数にドル記号といくつかの括弧が含まれている場合、ドル記号といくつかの括弧が表示されます。

実行時に拡張するには、コマンドを関数に保存します。

renew() {
    "$INST_CERT" -n "${CERT_NAME}_$(date +"%Y")" $INST_OPTS "$PAN_MGMT"
}

ここで拡張する変数を引用するときは注意してください。トークン化に依存している場合は、必要に応じて機能することを確認するためにさらに注意してください。

関連/参照:変数に保存されたコマンドをどのように実行できますか?

おすすめ記事