diff 명령을 사용하여 두 문자열을 비교하시겠습니까?

diff 명령을 사용하여 두 문자열을 비교하시겠습니까?

~에 따르면https://www.computerhope.com/unix/udiff.htm

diff명령은 두 파일을 분석하고 다른 줄을 인쇄합니다.

동일한 diff명령을 사용하여 두 문자열을 비교할 수 있습니까?

$ more file*
::::::::::::::
file1.txt
::::::::::::::
hey
::::::::::::::
file2.txt
::::::::::::::
hi
$ diff file1.txt file2.txt 
1c1
< hey
---
> hi

heyhi및 의 내용을 두 개의 다른 파일에 저장하지 않고 직접 읽을 수 있습니까 ?

그런데 아래 예에는 heyor 라는 파일이 없으므로 오류 메시지가 표시됩니다.hiNo such file or directory

$ diff hey hi
diff: hey: No such file or directory
diff: hi: No such file or directory

답변1

diffdiff예, 파일만 비교되므로 두 문자열로 파일을 생성하는 경우 이를 사용할 수 있습니다 .

이를 수행하는 빠른 방법은 다음을 지원하는 셸에서 프로세스 대체를 사용하는 것입니다.

diff <( printf '%s\n' "$string1" ) <( printf '%s\n' "$string2" )

예:

$ diff <( printf '%s\n' "hey" ) <( printf '%s\n' "hi" )
1c1
< hey
---
> hi

다른 껍질에서는

printf '%s\n' "$string1" >tmpfile
printf '%s\n' "$string2" | diff tmpfile -
rm -f tmpfile

diff두 번째 예에서는 파일에 첫 번째 문자열이 포함되어 있고 두 번째 문자열은 표준 입력으로 제공됩니다. diff첫 번째 문자열을 첫 번째 인수로 포함하는 파일을 사용하여 호출됩니다. 두 번째 인수는 -표준 입력을 읽어야 함을 나타냅니다(두 번째 문자열은 을 통해 도달됩니다 printf).

답변2

스크립트 편집기(AppleScript)에서 "diff" 명령에 대해 파일 입력 대신 문자열을 사용하려는 사람들을 위해 약간의 노력 끝에 다음이 작동한다는 것을 알았습니다.

do shell script "bash -c 'diff -y <(echo '\\''" & string1 & "'\\'') <(echo '\\''" & string2 & "'\\'')'

bash 셸과 사악한 이스케이프 마커에서 실행하려면 코드를 문자열로 렌더링해야 합니다.

관련 정보