我有一个包含斜杠的变量,我想对其进行修改,使其包含用于转义的双斜杠。
所以,这可以直接在终端中运行:
> echo "$MY_PASSWORD" | sed 's/\\/\\\\/g'
*&SD*S&gdo3\\(*SsdDS
但这不是:
export MODIFIED_PASSWORD=$(echo "$MY_PASSWORD" | sed 's/\\/\\\\/g')
echo $MODIFIED_PASSWORD
*&SD*S&gdo3\(*SsdDS
需要明确的是,问题来自于解释反斜杠转义序列的
echo
:
#!/bin/zsh
MY_PASSWORD='*&SD*S&gdo3\(*SsdDS'
MODIFIED_PASSWORD_1=${MY_PASSWORD//\\/\\\\}
MODIFIED_PASSWORD_2=$(printf %s "$MY_PASSWORD" | sed 's/\\/\\\\/g')
printf '%s\n' "$MY_PASSWORD" "$MODIFIED_PASSWORD_1" "$MODIFIED_PASSWORD_2"
*&SD*S&gdo3\(*SsdDS
*&SD*S&gdo3\\(*SsdDS
*&SD*S&gdo3\\(*SsdDS