antes de começar, estou ciente de que esse pode ser um problema que deve ser aberto no git-hub, mas;
a. é menor
b. a funcionalidade da barra invertida já foi descrita por um problema fechado anteriormente, mas não o espaço em branco (veja aqui )
c. não consigo abrir problemas no git-hub, sendo um novo usuário
d. pode ajudar os recém-chegados por meio da indexação do Google.
Sinta-se à vontade para criar um problema no git-hub em meu nome.
Considere o seguinte código;
# Our fish :)
set fishies \
">('>" \
"><=*>" \
">-<==*>" \
">==(--v-*);->" \
"><>" \
"><(((º>" \
">-<===*>" \
">(̠̄:̠̄ >" \
">><((( ◉ >"
# Usage ; set fish (getfish) && echo $fish
function getfish
# Set our fish to a random item from the "fishies" list
set -l fish $fishies[(random 1 (count $fishies))]
# Return our fish to the STDOUT
echo $fish
end
Isso funciona bem. No entanto, se introduzirmos um espaço em branco após qualquer barra invertida ("\__" (indicado pelo sublinhado (_))) a linha abaixo dela não será passada para o set fishes
comando.
Esse é um comportamento correto e há alguma documentação sobre como a barra invertida funciona, já que só descobri isso por meio de ajustes?
Para reiterar, alguém pode me explicar por que esse comportamento ocorre?
O máximo que encontrei (acho) em referência à barra invertida é o seguinte código sobre o problema do git-hub mencionado anteriormente (mas não o entendi completamente);
It (the usage of a backslash to form a new-line) has been special cased in tokenizer.cpp:539 :
if ((*(tok->buff) == L'\\') &&(*(tok->buff+1) == L'\n'))
{
tok->last_pos = tok->buff - tok->orig_buff;
tok->buff+=2;
tok->last_type = TOK_END;
return;
}
Peço desculpas se isso for ingênuo/mal escrito, sou um usuário novo e inativo. Pensei em dar meus 2 centavos e, espero, ajudar outros novatos que estejam enfrentando o mesmo problema. É um ótimo pequeno recurso e uma ferramenta exuberante. Seria uma pena deixar esse comportamento sem documentação, pois ele é útil ao escrever comandos/strings longos.
Uma barra invertida escapa do caractere que vem depois dela.
Por exemplo
\t
, tab,\'
é uma aspa simples regular (que não cita nada). Quando você faz\ t
ou\ '
que escapa o espaço , não o caractere depois. Isso pode ser útil para argumentos com espaços comoonde ele imprimirá "hello world". A alternativa é citá-lo como
"hello world"
ou'hello world'
.A barra invertida escapa do caractere diretamente depois, não é diferente para quebras de linha. Quando você faz
a linha termina em um caractere de nova linha, e é disso que a barra invertida precisa escapar, então ela precisa estar imediatamente antes da nova linha ou ela escapará de qualquer coisa que venha diretamente depois dela (como um espaço).
Alterar isso em fish exigiria remover a barra invertida-espaço. Isso tornaria qualquer
\ x
escape o "x" em vez disso. Posso dizer com segurança que isso não vai acontecer, pois seria uma mudança drástica e removeria um uso útil da barra invertida.Também não é nada incomum, os projéteis posix fazem o mesmo.