git diff에 대한 임시 파일을 명시적으로 생성하지 않고 "문자열"의 문자 수준 비교 수행

git diff에 대한 임시 파일을 명시적으로 생성하지 않고 "문자열"의 문자 수준 비교 수행

이것을 참조하세요https://stackoverflow.com/a/31356602, 다음과 같은 코드를 작성했습니다.

#!/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"

반품:

여기에 이미지 설명을 입력하세요.

이제 나는 그것을 한 줄로 압축하려고합니다.

#!/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")

하지만 나는 다음을 얻습니다.

여기에 이미지 설명을 입력하세요.

임시 파일을 명시적으로 생성하지 않고 어떻게 git diff문자열을 파일로 전달할 수 있나요?

노트.내 목표는 두 개의 (짧은) 문자열을 (문자 수준) "시각적으로" 비교하여 다음과 유사한 출력을 얻는 것입니다.

여기에 이미지 설명을 입력하세요.

비교된 두 문자열 간의 차이점이 단일 문자열에서 강조 표시됩니다. 출력은 git diff이상적이지만 다른 솔루션도 열려 있습니다.

답변1

파이프 기반 리디렉션(예: bash의 <().

그러나 zsh-isms를 사용하면 작동합니다. 임시 파일 확장자가 있습니다 =().

#!/usr/bin/zsh
# use zsh instead of 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=. \
    =(printf '%s\n' "$string1") \
    =(printf '%s\n' "$string2")

관련 정보