Referindo-me a isto https://stackoverflow.com/a/31356602 , escrevi este código:
#!/bin/bash
# Define the two strings to compare
string1="First string with some random text."
string2="Second string with some random text and some changes."
# Create a temporary directory
temp_dir=$(mktemp -d)
# Create temporary files for the strings
file1="$temp_dir/string1.txt"
file2="$temp_dir/string2.txt"
echo -e "$string1" > "$file1"
echo -e "$string2" > "$file2"
# Use the git diff command to compare the temporary files
git diff --no-index --word-diff=color --word-diff-regex=. "$file1" "$file2"
# Delete the temporary directory
rm -rf "$temp_dir"
que retorna:
Agora estou tentando condensá-lo em uma única linha:
#!/bin/bash
# Define the two strings to compare
string1="First string with some random text."
string2="Second string with some random text and some changes."
# Use the git diff command to compare the strings
git diff --no-index --word-diff=color --word-diff-regex=. <('%s\n' "$string1") <(printf '%s\n' "$string2")
mas eu entendo:
Como posso passar strings como arquivos git diff
sem criar explicitamente arquivos temporários?
Observação. Meu objetivo é comparar "visualmente" (em nível de caractere) duas strings (curtas), obtendo uma saída semelhante a esta:
em que as diferenças entre as duas strings comparadas são destacadas em uma única string. O resultado git diff
é ideal, mas também estou aberto a outras soluções.
Isso não será possível com o redirecionamento baseado em pipe como no seu bash
<()
.Mas: com zsh-ismos, deve funcionar. Existe a expansão do arquivo temporário
=()
: