이와 같은 슬래시가 포함된 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