質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

596閲覧

【Ansible】先頭に\マークを含んだ変数値を定義したい

x066

総合スコア23

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/07/25 17:47

実現したいこと

Ansibleで以下のような先頭に¥マークを含んだ変数値を定義したいです
※文字コードの関係?で表記はバックスラッシュになってますがやりたいことは上記の通りです

yml

1- name: 変数生成 2 set_fact: 3 abc: "\aabbcc" 4

発生している問題・エラーメッセージ

この状態だとコーディングエラーが発生してしまいます

試したこと

¥マークを2つ入力することでコーディングエラーは回避して実行できましたが、試しに変数を出力してみたところ¥マークが2つ出力されてしまいました。

yml

1- name: 変数生成 2 set_fact: 3 abc: "\\aabbcc" 4 5- name: 変数出力 6 debug: 7 msg: "{{ abc}}"
出力結果
\\aabbcc

上記の発生原因や対処方法についてご教授頂きたく存じます。

以上となりますがよろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

Ansibleのバージョンは2.8.1です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

この表記でも同じ結果が得られると思います。
debug: msg:で出力した結果には\\とバックスラッシュが2文字入っていますが、文字列長は7文字なので変数に格納されているバックスラッシュは1文字だけです。

yaml

1 - name: 変数設定 2 set_fact: 3 abc: '\aabbcc' 4 - name: 変数出力 5 debug: 6 msg: "{{ abc }}" 7 - name: 変数長出力 8 debug: 9 msg: "{{ abc | length }}"

ansible

1TASK [変数設定] **************************************************************** 2ok: [localhost] 3 4TASK [変数出力] **************************************************************** 5ok: [localhost] => { 6 "msg": "\\aabbcc" 7} 8 9TASK [変数長出力] ************************************************************** 10ok: [localhost] => { 11 "msg": "7" 12} 13 14PLAY RECAP ********************************************************************* 15localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

投稿2023/07/27 00:21

shirotodo

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

AML のリテラル表現を利用すると良いでしょう。具体的には、| キャラクタを使用してマルチライン文字列として変数を定義し、その中にバックスラッシュを1つ記述します。これにより、バックスラッシュはエスケープシーケンスとして解釈されず、期待する結果が得られます。

yaml

1- name: 変数生成 2 set_fact: 3 abc: | 4 \aabbcc 5 6- name: 変数出力 7 debug: 8 msg: "{{ abc }}"

このコードを実行すると、変数 abc の出力は \aabbcc となります。ただし、この方法はマルチライン文字列のため、末尾に改行 (\n) が含まれます。それが問題になる場合は、Jinja2 フィルタの trim を使用して改行を削除できます。

yaml

1- name: 変数出力 2 debug: 3 msg: "{{ abc | trim }}"

投稿2023/07/26 01:58

Ripple_py

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問