このようなスラッシュを含むbashスクリプトパラメータを文字列置換を実行し、他のファイルを書き換える関数にmy_server/my_repo/my_image
渡したいと思います。sed
次のように文字列を設定するときにスラッシュをエスケープします。
#!/usr/bin/bash
IMAGE_NAME="my_server\/my_repo\/my_image"
CURRENT_VERSION="1.0.0"
TARGET_VERSION="1.0.1"
TARGET_FILE="./my_deployment.yaml"
sed -i "s/$IMAGE_NAME:$CURRENT_VERSION/$IMAGE_NAME:TARGET_VERSION/" "$TARGET_FILE"
これはうまく機能しますが、エスケープまたはエスケープされていない同じ文字列を渡すと、それを機能させることはできません。私は、これが$IMAGE_NAME
置換を実行すると完全に消えるwhileコマンドで変数がエスケープされないためであると確信しています。/
sed
sed
私は買収とエスケープのさまざまな組み合わせを試しました。
> ./myscript.sh my_server/my_repo/my_image
> ./myscript.sh my_server\/my_repo\/my_image
パラメーターを別の組み合わせに割り当てるときは、パラメーターを変換してください$IMAGE_NAME
。
> IMAGE_NAME=$1
> IMAGE_NAME="$1"
> IMAGE_NAME=`echo $1 | sed 's/\//\\\//g'`
私はこれがbashが文字列を処理してエスケープする方法に関連していると確信していますが、方法がわかりません。
では、次のように文字列をパラメータとして渡すにはどうすればよいですか?
my_server/my_repo/my_image
変数から呼び出されたときの出力:
my_server\/my_repo\/my_image
ベストアンサー1
引用符を使用するか、倍増してコマンドラインからバックスラッシュからシェルを保護する必要があります。
myscript.sh
'my_server\/my_repo\/my_image'
..... Or
myscript.sh my_server\\/my_repo\\/my_image