백핸드 ^ H ^ H ^ H ^ H ^ H ^ Hspaces


47

일부 터미널에서 백 스페이스를 누르면 제어 코드 ^H가 생성 되어 이전 문자를 삭제합니다. 이로 인해 편집이 코미디 효과를 줄 수있는 멋진 관용구 가 생겼습니다 .

이 바보 ^ H ^ H ^ H ^ Hgentleman에게 친절하십시오, 그는 회사 본사에서 방문하고 있습니다.

하나 이상의 문자열이 주어지면 ^H각각에 대한 백 스페이스 결과를 출력합니다 ^H. 입력은 인쇄 가능한 문자 (ASCII 32-126) 만 사용하며 ^로만 표시됩니다 ^H. 빈 텍스트에는 백 스페이스가 발생하지 않습니다.

출력 환경이 제어 코드, 특히 백 ​​스페이스 코드를 지원한다고 가정하지 않을 수 있습니다 \x08.

>> Horse^H^H^H^H^HCow
Cow

>> Be nice to this fool^H^H^H^Hgentleman, he's visiting from corporate HQ.
Be nice to this gentleman, he's visiting from corporate HQ.

>> 123^H45^H^H^H78^H
17

>> Digital Trauma^H^H^H^H^H^H^H^H^H^H^H^H^H^HMaria Tidal Tug^H^H^H^H^H^H^H^H^H^H^H^H^H^H^HDigital Trauma
Digital Trauma

리더 보드

다음은 Martin Büttner가 제공 한 언어 별 리더 보드 입니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

# Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

# Ruby, <s>104</s> <s>101</s> 96 bytes


4
AAA^HB^H^H유효?
Nathan Merrill

@NathanMerrill 예, 결과는 A입니다.
xnor

3
나는 망막 이 여기에서 잘할 것이라고 생각합니다.
Claudiu

1
@Fatalize : "빈 텍스트에는 백 스페이스가 발생하지 않습니다."
Maltysen

16
@Maria Tidal Tug 가 나를 괴롭히기 위해 다시 온다
Digital Trauma

답변:


69

GNU sed, 11 바이트

:;s/.^H//;t

테스트 출력 :

$ echo "Horse^H^H^H^H^HCow
Be nice to this fool^H^H^H^Hgentleman, he's visiting from corporate HQ.
123^H45^H^H^H78^H
Digital Trauma^H^H^H^H^H^H^H^H^H^H^H^H^H^HMaria Tidal Tug^H^H^H^H^H^H^H^H^H^H^H^H^H^H^HDigital Trauma" | sed ':;s/.^H//;t'
Cow
Be nice to this gentleman, he's visiting from corporate HQ.
17
Digital Trauma
$ 

5
누가 나타 났는지 봐! 마리아 갯벌입니다 ^ H ^ H ^ H ^ H ^ H ^ H ^ H ^ H ^ H ^ H ^ H ^ H ^ H ^ H ^ HD 외상!
Alex A.

@AlexA. 농담을 놓치고 있습니까?
user253751

@immibis : 질문에 대한 Digital Trauma의 의견 을 보십시오 .
Alex A.

sed -r ':;s/(^|.)\^H//;t'-이것은 여분의 6 바이트를 희생하여 작동합니다
aragaer

@aragaer 왜 필요한가요? OP는 " 빈 텍스트에는 백 스페이스가 발생하지 않습니다 "라고 말합니다 . ^H문자열의 시작은 빈 텍스트의 백 스페이스 라고 생각 합니다.
디지털 외상

19

Pyth, 11 바이트

.U+PbZcz"^H

데모.

.U+PbZcz"^H
               Implicit: z = input()
      cz"^H    z.split("^H")
.U             reduce, with the first element of the list as the initial value.
   Pb          Remove the last character of what we have so far.
  +  Z         And add on the next segment.
               Print implicitly.

17

Gema, 6 바이트

?#\^H=

샘플 실행 :

bash-4.3$ gema -p '?#\^H=' <<< 'pizza is alright^H^H^H^H^H^Hwesome'
pizza is awesome

바보, 신사의 예가 너무 오래 걸리기 때문에 CW. (하루 후에 처리됩니다. 통역사의 결함 일 수 있습니다. 여기의 다른 모든 예는 몇 초 단위로 처리됩니다.) Gema의 재귀 패턴은 재귀 수준의 영향을받지 않는 것으로 보이지만 일치하지 않는 텍스트의 양은 처리 시간을 기하 급수적으로 증가시킵니다. .


언어에 대한 링크가 있습니까? Github에 대한 빠른 검색은 꽤 많이 나타났습니다
Sp3000

확실한. gema.sourceforge.net (BTW, Gema 프로젝트는 2003-10-27에 등록되었으며 GitHub는 2008-04-10에 시작되었습니다. 그 이유는 찾을 수 없습니다.)
manatwork

나는 재귀 깊이가 일치하지 않는 문자열의 길이와 \^H같다고 생각합니다. 왜냐하면 그것은 한 번에 한 문자를에 일치 시킬 때까지 반복적으로 반복되기 때문입니다 ?.
isaacg

15

C, 52 바이트

j;f(char*s){for(j=0;*s=s[j];s[j]==94?s--,j+=3:s++);}

f문자열에 대한 포인터를 입력으로 받는 함수 를 정의합니다 . 함수 호출 후 해당 포인터에는 수정 된 문자열이 포함됩니다.

간단한 테스트 :

int main(int argc, char** argv) {
    char buf[300] = "Digital Trauma^H^H^H^H^H^H^H^H^H^H^H^H^H^HMaria Tidal Tug^H^H^H^H^H^H^H^H^H^H^H^H^H^H^HDigital Trauma";
    f(buf);
    printf(buf);
    return 0;
}

위의 인쇄 :

Digital Trauma

1
이것은 정말 영리했습니다. 내가 주목 한 몇 가지 : 전역은 이미 0으로 초기화되어 있으므로 루프 j에서 초기화 할 필요가 없습니다 for(물론 단일 용도이지만 규칙에서 그에 대해서는 아무것도 보지 못합니다 :)). 할당을 감소와 결합 할 수도 있습니다. j;f(char*s){for(;s[j]==94?*s--=s[j],j+=3:s++);}(47 바이트)
Cole Cameron


@undergroundmonorail dang, 나는 그것을 놓쳤는 지 확인하기 위해 두 번 확인했습니다. 나는 아직도 골프를 코딩하는 것에 익숙하지 않지만 미래를 위해 그것을 기억할 것입니다 :). 정보에 대해서 감사드립니다!
Cole Cameron

1
@ColeCameron UB (sequenced 수정 및 액세스)가 있으며 불행히도 내 컴파일러 / 컴퓨터에 즉시 EXC_BAD_ACCESS가 발생합니다.
BrainSteel

1
@Quentin 나는 그것을 시도했지만 쉼표 s--, j+=3와 연산자 우선 순위 때문에 제대로 작동하지 않습니다.
BrainSteel

14

하스켈, 47 바이트

h(a,_:_:b)=f$init a++b;h(x,_)=x
f=h.span(/='^')

함수를 정의합니다 f :: String -> String. 작동 방식 :

    f "ab^Hc^Hd"
=== h ("ab", "^Hc^Hd")   (find ^H)
=== f ("a" ++ "c^Hd")    (backspace)
=== f "ac^Hd"            (join)
=== h ("ac", "^Hd")      (find ^H)
=== f ("a", "d")         (backspace)
=== f "ad"               (join)
=== h ("ad", "")         (find ^H)
=== "ad"                 (no ^H: base case)

1
두 경우를 바꾸고 빈 문자열 경우를 h수행 하여 바이트를 절약 할 수 있다고 생각합니다 h(x,_)=x.
Zgarb

12

CJam, 14 13 바이트

q"^H"/{W\ts}*

작동 원리

q                   e# Read the entire input
 "^H"/              e# Split it on occurrences of string "^H"
      {    }*       e# Reduce on the split array
       W\t          e# This is the tricky part. We know that if there are two parts that we
                    e# are reducing on, they must be separated by "^H". Which in turn means
                    e# that from the first part, last characters needs to be deleted
                    e# So we simply put the second part in place of the last character of the
                    e# first part.
          s         e# Doing the above makes it a mixed array of character and string.
                    e# So we convert it to a single string, ready to be served as first part
                    e# in next reduce iteration

업데이트 : jimmy23013 덕분에 1 바이트가 절약되었습니다.

여기에서 온라인으로 사용해보십시오


2
1 바이트 더 짧음 : W\ts.
jimmy23013

11

레티 나, 13 바이트

망막

+`.\^H(.*)
$1

두 줄은 자체 파일로 이동해야하지만 -s플래그를 사용하여 코드를 하나의 파일로 실행할 수 있습니다 .

각 단계 .\^H에서 문자열에서 첫 번째 일치 항목을 삭제 합니다. +삭제가 발생하지 않을 때까지 수정자를 사용하여이를 반복 합니다.


그냥 호기심 : 왜 캡처 (.*)되지 않은 것처럼 캡처 하는 것입니까?
manatwork

1
@manatwork이 방법으로 첫 .\^H단계 만 캡처합니다 . 그렇지 않으면 abc^H^H^H초래 ab^첫 번째 단계 후.
randomra

4
대체 제한을 아직 구현하지 않은 것에 대한 사과 (아마도 같은 것을 허용 할 것입니다 +1`.\^H) ;)
Martin Ender

10

자바 스크립트 ( ES6 ), 39 바이트

f=s=>(t=s.replace(/.\^H/,''))!=s?f(t):t

// TEST

Out=x=>O.innerHTML+=x+'\n'

Test=_=>(Out(I.value + "\n-> " + f(I.value)),I.value='')

;["Horse^H^H^H^H^HCow"
,"Be nice to this fool^H^H^H^Hgentleman, he's visiting from corporate HQ."
,"123^H45^H^H^H78^H"
,"Digital Trauma^H^H^H^H^H^H^H^H^H^H^H^H^H^HMaria Tidal Tug^H^H^H^H^H^H^H^H^H^H^H^H^H^H^HDigital Trauma"]
.forEach(t => Out(t + "\n-> " + f(t)))
#I { width:400px }
<pre id=O></pre>
<input id=I><button onclick='Test()'>-></button>


10

펄, 20 16 15 바이트

(14 자 코드 + 1 자 명령 행 옵션)

s/.\^H//&&redo

샘플 실행 :

bash-4.3$ perl -pe 's/.\^H//&&redo' <<< "Be nice to this fool^H^H^H^Hgentleman, he's visiting from corporate HQ."
Be nice to this gentleman, he's visiting from corporate HQ.

1
4 문자 절약 :1while s/.\^H//
Kevin Reid

와! @KevinReid가 훌륭합니다. 감사합니다.
manatwork

1
하나 더 :s/.\^H//&&redo
Dennis

감사합니다, @Dennis. redo어떻게해서 든 내 기술력을 발휘하지 못했습니다. 그것을 바꿔야 할 것입니다.
manatwork

2
@Dennis의 버전은 루프 또는 { }블록 내의 유일한 명령문 인 경우에만 의도 한대로 작동 합니다. (작동하는 이유 perl -p-p스위치가 자동으로 코드를 while루프 안에 넣기 때문입니다.) Kevin의 버전은 모든 설정에서 작동합니다.
Ilmari Karonen

9

줄리아, 58 42 41 바이트

manatwork 덕분에 16 바이트를 절약하고 Glen O 덕분에 1 바이트를 절약했습니다!

f(s)='^'s?f(replace(s,r".\^H","",1)):s

문자열을 받아들이고 문자열을 반환하는 재귀 함수를 만듭니다.

^H입력에가 포함 된 동안 한 번에 한 번만 발생 하는 빈 문자열로 바뀝니다 ^.

예 :

julia> f("123^H45^H^H^H78^H")
"17"

julia> f("pizza is alright^H^H^H^H^H^Hwesome")
"pizza is awesome"

줄리아를 처음 본 것은 이번이 처음입니다. 좋은!
Ogaday

8

REGXY, 10 바이트

정규식 대체 기반 언어 인 REGXY를 사용 합니다. 문자 뒤에 ^ H가없는 문자를 대체합니다. 그런 다음 두 번째 줄은 이전 줄에 대한 포인터 일 뿐이며 일치하지 않을 때까지 대체를 반복합니다.

/.\^H//
//

위의 링크에서 샘플 인터프리터를 사용하여 올바르게 컴파일하고 실행하지만 언어 사양의 모호함에 대한 가정에 의존하기 때문에 솔루션이 약간 건 방울 수 있습니다. 스펙은 각 행의 첫 번째 토큰 (/ 이전)이 레이블로 작동한다고 가정하지만, 널 레이블 포인터는 널 레이블이있는 파일의 첫 번째 명령 (또는 다른 말로, 'null'은 유효한 라벨입니다). 덜 건방진 해결책은 다음과 같습니다.

a/.\^H//
b//a

13 바이트에 해당합니다.


7

파이썬 3, 53 바이트

o=""
for x in input().split("^H"):o=o[:-1]+x
print(o)

그러나 개인적으로 나는이 단어 버전이 더 좋습니다.

H=input().split("^H")
print(eval("("*~-len(H)+")[:-1]+".join(map(repr,H))))

흥미로운 것은

'B''a''c''k''h''a''n''d''e''d'[:-1][:-1][:-1][:-1][:-1][:-1]

실제로 작동하고 있습니다 'Back'내가지도하려고, 그래서 ^H -> [:-1]다른 문자와 c -> 'c'다음 eval,하지만 불행히도 당신은하지 않고 이후에 모든 문자열을 가질 수 없습니다 +이것이 실패, 그래서 :

'B''a''c''k''h''a''n''d''e''d'[:-1][:-1][:-1][:-1][:-1][:-1]'s''p''a''c''e''s'

헤이 ... 정말 깔끔합니다.
Alex Van Liew

+=루프에서 작동
CalculatorFeline

@CatsAreFluffy 그것은 o=o[:-1]+x아니에요o=o+x
Sp3000

죄송합니다. 같은합니까 o[:-2]=x작업을?
CalculatorFeline

@CatsAreFluffy 할당 할 수 없음str
Sp3000

7

하스켈, 52 47 바이트

import Data.Lists
foldl1((++).init).splitOn"^H"

사용 예 :

> map (foldl1((++).init).splitOn"^H") ["Horse^H^H^H^H^HCow", "123^H45^H^H^H78^H", "Digital Trauma^H^H^H^H^H^H^H^H^H^H^H^H^H^HMaria Tidal Tug^H^H^H^H^H^H^H^H^H^H^H^H^H^H^HDigital Trauma"]
["Cow","17","Digital Trauma"]

작동 방식 :

                  splitOn"^H"     -- split on substring "^H", e.g "Horse^H^H^H^H^HCow" -> ["Horse","","","","","Cow"]
                 .                -- then
foldl1(         )                 -- fold from left by
            init                  --   first dropping the last char from the left argument
       (++).                      --   second concatenating left and right argument

6

루비, 27 24 20 바이트

(19 자 코드 + 1 자 명령 행 옵션)

$_=$`+$'while/.\^H/

덕분에 :

  • 전역 변수 사용을 제안하는 Ventero (-4 자)

샘플 실행 :

bash-4.3$ ruby -pe '$_=$`+$'"'"'while/.\^H/' <<< "Be nice to this fool^H^H^H^Hgentleman, he's visiting from corporate HQ."
Be nice to this gentleman, he's visiting from corporate HQ.

+1 나는 이것을 볼 때까지 루비 응답을 할 것이라고 생각했다. 이것이 될만큼 작을 것이라고 확신한다. 좋은 사용법 []!
daniero

처음에는 다른 버전이있었습니다 loop{$_[/.\^H/]=""}rescue"". Ruby의 예외 처리 시원함을 보여주기 때문에 더 좋습니다.
manatwork

하하, 그것은 대단한 것입니다 :)
daniero

1
결코 늦지 않는 것이 낫습니다 : $_=$`+$'while~/.\^H/20 명 ( regexp literal in condition경고에 신경 쓰지 않으면 물결표를 떨어 뜨릴 수도 있습니다 ).
Ventero

1
@manatwork : 기술적으로 그것은 모든 루비 버전> = 1.9에 나타납니다 (조건의 정규 표현식과 문자열 리터럴은 1.8 이후에 더 이상 사용되지 않습니다), 나는 ruby여전히 기본값이 1.8이지만 irb루비 2.1.5를 사용 한다고 생각합니다 .
Ventero

4

파이썬 2, 50

lambda거기에 1 초가 있는 것은 조금 이상 하지만 지금까지 최고의 Python 인 것 같습니다.

lambda s:reduce(lambda a,b:a[:-1]+b,s.split('^H'))

3

Pyth-19 바이트

실제로이 작업을 실제로 잘하면 줄이십시오.하지만 한 번에 하나의 문자 만 수행하므로 줄 바꿈으로 대체하기 위해 실제 알고만큼 거의 많은 문자를 사용해야했습니다 ^H. 더 좋은 방법을 찾고 있습니다.

u?+GHnHbPGjbcz"^H"k

여기에서 온라인으로 사용해보십시오 .


3

TeaScript , 7 바이트 [경쟁 불가]

이 도전이 게시 된 후 TeaScript가 만들어 졌으므로 경쟁하지 않습니다 . 이것은 참고로 여기에 있습니다.

xW/.\^H

이것은 새로운 TeaScript 3을 사용하고 재귀 대체 문자를 제거합니다


1
어떤 이유 때문에 ISO 8859 링크의 리더에 8859 바이트로이 카운트 ...
ev3commander

regerence? xD
cat

2

K5, 64 바이트

K는 실제로 이런 종류의 작업을 위해 설계되지 않았습니다 ...

{[s]$[2>#s;s;`=t:*&{"^H"~2#x_s}'1+!-2+#s;s;,/2#2!|(0,t,3+t)_s]}/

2

golflua, 36 바이트

\f(s)@o!=s o=s;s=s:g(".^H","",1)$~s$

샘플 실행 :

Lua 5.2.2  Copyright (C) 1994-2013 Lua.org, PUC-Rio
> \f(s)@o!=s o=s;s=s:g(".^H","",1)$~s$
> w(f("Be nice to this fool^H^H^H^Hgentleman, he's visiting from corporate HQ."))
Be nice to this gentleman, he's visiting from corporate HQ.

2

자바 스크립트, 62 바이트

가장 짧은 것은 아니지만 잘 작동합니다.

t=prompt();while(t.match(R=/.\^H/))t=t.replace(R,'');alert(t);

아마 많이 단축 될 수 있습니다!


1
가장 짧은 것은 아니며 작동하지 않습니다 (테스트 사례 중 하나를 시도하십시오). 정규식은 전역이 아니어야합니다 (/ g 제거)
edc65

@ edc65 팁 주셔서 감사합니다. 나는 몇 가지를 시도했고 그들은 일했다. 그래서 내가 이렇게 게시했습니다
Ismael Miguel

2

R, 54 52 바이트

f=function(s)ifelse(s==(r=sub(".\\^H","",s)),r,f(r))

내 Julia의 대답 과 같은 기본 아이디어 . 문자열을 받아들이고 문자열을 반환하는 재귀 함수를 만듭니다. 단일 발생이 ^H제거 된 상태 에서 입력이 자체와 같으면 리턴하십시오. 그렇지 않으면 함수를 다시 호출하십시오.

당신은 할 수 있습니다 온라인으로보십시오 !


2

ECMAScript 6, 57 바이트

s=>{while(~s.indexOf`^H`)s=s.replace(/.\^H/,'');return s}

이것은 아마도 골프 타기 일 것입니다. 아마도 아닌 방법을 생각해야합니다.


2
어때요 s=>{while(s!=(s=s.replace(/.\^H/,""));return s}?
lrn

경우 또는, while그리고 return너무 긴, 그것은 재귀 수 :var f=s=>s==(s=s.replace(/.\^H/))?s:f(s)
LRN

@lm을 바꾸려면 두 번째 매개 변수 ""를 추가해야합니다. 그럼 당신은 내 대답이 있습니다 :)
edc65

참된. 그리고 빈 문자열 인수가 있어야합니다, 나는 잘못된 버전을 복사해야합니다 :(
lrn

~s.indexOf`^H`될 수 있습니다/\^H/.test(s)
그 찰스

2

자바, 78 77 바이트

String f(String a){while(!a.equals(a=a.replaceFirst(".\\^H","")));return a;}

1
쉼표 뒤의 공백을 제거하여 하나의 문자를 저장할 수 있습니다.
ProgramFOX

2

(Visual) FoxPro 모든 버전 80 바이트

PARA t
DO WHILE AT('^H',t)>0
t = STRT(t,SUBS(t,AT('^H',t)-1,3))
ENDDO
RETU t

^ H를 찾아 하나의 문자를 백업하여 문자열 변환을 비 웁니다.


2

줄리아, 41 39 바이트

s->foldl((t,v)->chop(t)v,split(s,"^H"))

그것이하고있는 일은 ^ H를 구분 기호로 사용하고 각 문자열에서 마지막 문자를 제거한 다음 다음 문자열을 연결하여 마지막 문자를 다시 제거하는 것입니다. 다른 Julia 답변과 달리 이것은 재귀 함수가 아닙니다.

참고 : 정의에서 함수 이름을 제거했습니다. 원래는 말했다 f(s)=보다는 s->, 당신은 그것을 사용 f("AAA^HB^H^H")...하지만 나는 그것이 "익명"으로, 그 이름으로 자신을 사용할 수 있도록함으로써 2 바이트를 저장하고있다. 당신은 이것을 다음과 같이 사용합니다 :

(s->foldl((t,v)->chop(t)v,split(s,"^H")))("AAA^HB^H^H")

(당신은 또한으로에 변수를 할당 할 수 있습니다 f=s->foldl((t,v)->chop(t)v,split(s,"^H")), 다음 f("AAA^HB^H^H")작동합니다)


2

rs, 8 바이트

기술적으로, 이것은이 질문이 게시 된 후에 추가 한 기능에 따라 다르므로 계산되지 않습니다. 그러나 나는 그것이 꽤 깔끔하다고 생각합니다.

+?1.\^H/

라이브 데모 및 테스트 사례 .


새로운 기능이 한도 교체입니까?
xnor

@xnor 예 : ?1.
kirbyfan64sos

@Optimizer 왜? 당신은 어쨌든 Gema를 잃고 있습니다. : O
kirbyfan64sos

예 :(. 의견을 게시 한 후 gema를 보았습니다
Optimizer

1

파이썬 2, 74 + 2 = 76 바이트

나는 지금까지 몇 가지 접근법을 시도했지만 이것이 지금까지 생각해 낸 최선의 방법입니다.

n=input();o='';c=0
for l in n:d=l=='^';o=[o+l*(1-c),o[:-1]][d];c=d
print o

4
이 2 바이트는 어디에서 오는가?
xnor

이 작업을 수행하려면 @xnor 입력을 따옴표로 묶어야합니다. 나는 그것을 게시물에 넣는 것을 잊었다.
Kade

1
일반적인 규칙은 문자열 인수를 무료로 따옴표로 묶는 것이었지만, 확실하지는 않습니다.
xnor

1

볼거리, 84 바이트

R Z S T="",Y=$L(Z,"^H") F I=1:1:Y{S T=T_$P(Z,"^H",I) S:I<Y T=$E(T,1,$L(T)-1)} W !,T

이것은 아마도 함수로 단축 될 수 있습니다 (1 바이트는 빠른 테스트로 저장할 수있었습니다).하지만 나는 한 줄짜리 측면과 비슷합니다 : :-)

중괄호는 내가 가장 정통한 Mumps의 Intersystems Cache 풍미에서 나옵니다.


1

자바-123 바이트

나는 개인적으로 g---1가장 좋은 부분을 좋아한다 .

String f(char[] a){String b="";for(int g=-1;++g<a.length;b=(a[g++]=='^'?b.substring(0,b.length()-1):b+a[g---1]));return b;}

확장 (약간) :

  String f(char[] a) {
      String b = "";
      for (int g = -1;
           ++g < a.length;
           b = (a[g++]=='^' 
                ? b.substring(0, b.length() - 1) 
                : b + a[g---1])
      );
      return b;
  }

1

배치-138 바이트

@!! 2>nul||cmd/q/v/c%0 %1&&exit/b
set s=%1&for /F %%a in ('"prompt $H&echo on&for %%b in (1)do rem"')do set D=%%a
echo %s:^H=!D! !D!%

첫 번째 줄은 긴 바이트에 걸쳐 몇 바이트를 절약하는 방법입니다 @echo off&setLocal enableDelayedExpansion(에코가 꺼지고 궁금한 경우 변수 확장이 지연 될 수 있음). Batch의 골프 팁 에서 설명했습니다 .

두 번째 줄은 백 스페이스 제어 문자를 변수에 저장하는 깔끔한 방법입니다. 꽤 해 키고, 나는 그것을 신용하는 척 할 수 없습니다. 여기 에 설명되어 있습니다 . 기본적으로 prompt 명령을 사용하여 백 스페이스 문자를 생성하고이를 변수로 캡처합니다 (이 경우) !D!.

마지막 줄은-replace ^Hwith 의 간단한 문자열 조작을 수행합니다 !D!<SPACE>!D!.

C:\>bsp.bat "testing^H^H^H test"
"test test"

불행히도 그것은 "AAA^HB^H^H"어디에서 생산해야하는지 "A"대신에 발생합니다 "A"B. 다소 혼란 스럽습니다. 배치 문자열 조작이 어떻게 더 깊이 작동하는지 살펴 봐야합니다.

C:\>bsp.bat "AAA^HB^H^H"
"A"B

여기 도움이되는 사람들 덕분에 -백 스페이스 문자 (0x08) 만 저장하고 문자를 덮어 쓰는 것만 알았습니다. 이제 다음과 같은 예제에서 작동합니다.

C:\>bsp.bat "AAA^HB^H^H"
"A"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.