![diff 명령을 사용하여 두 문자열을 비교하시겠습니까?](https://linux55.com/image/171995/diff%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%91%90%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EB%B9%84%EA%B5%90%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
~에 따르면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
hey
hi
및 의 내용을 두 개의 다른 파일에 저장하지 않고 직접 읽을 수 있습니까 ?
그런데 아래 예에는 hey
or 라는 파일이 없으므로 오류 메시지가 표시됩니다.hi
No such file or directory
$ diff hey hi
diff: hey: No such file or directory
diff: hi: No such file or directory
답변1
diff
diff
예, 파일만 비교되므로 두 문자열로 파일을 생성하는 경우 이를 사용할 수 있습니다 .
이를 수행하는 빠른 방법은 다음을 지원하는 셸에서 프로세스 대체를 사용하는 것입니다.
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 셸과 사악한 이스케이프 마커에서 실행하려면 코드를 문자열로 렌더링해야 합니다.