psqlcmd1="psql -c \"""alter user root with encrypted password 'D1£LF1A\!2eNZY6P$9examplePassword';""\""
Com a expansão do histórico desativada, o valor de psqlcmd1
é
psql -c "alter user root with encrypted password 'D1£LF1A\!2eNZY6PexamplePassword;"
Dentro de aspas duplas, os únicos caracteres que não se destacam são \"$'
, mais !
se a expansão do histórico estiver ativada. Note em particular que '
dentro de aspas duplas significa: ele não inicia uma string literal, as aspas duplas já iniciaram uma. Observe também que, como $
inicia uma expansão variável, $9
é expandido; seu valor é o 9º parâmetro para o script atual da função, vazio se houver menos de 9 parâmetros.
Observe também que "foo""bar"
é a mesma coisa que "foobar"
: são dois literais de string unidos, então pode ser escrito como um único literal de string.
Dentro de aspas duplas, você precisa colocar uma barra invertida antes dos caracteres \"$'
se quiser que a sequência resultante inclua esse caractere. Isso não funciona para !
: "!"
é a string !
em um script, mas invoca a expansão de histórico se isso estiver ativado; "\!"
é sempre a string \!
. Você precisa usar aspas simples ou sem aspas em torno do !
. O mais simples seria usar um literal com aspas simples: todos os caracteres entre aspas simples representam eles mesmos, exceto as aspas simples. Para incluir uma aspa simples em um literal com aspas simples, termine o literal, use uma folga para citar uma aspa simples e inicie um literal entre aspas simples; ou, em outras palavras, para incluir uma aspa simples em um literal entre aspas simples, escreva '\''
.
psqlcmd1='alter user root with encrypted password '\''D1£example!2eNZY6P$9examplePassword'\'';'