Go로 지령선 도구를 만들 때의 Unix wildcard 이야기

4372 단어 Go

개시하다


Go(Un) Conference(Go 팥) LT 대회 2kg LT를 쓰고 싶은데, 급한 일이 있어서 자료만 공개합니다.(첫 Qiita 슬라이드)

Who

  • name:sssinsi(しん)
  • hoby: 도예
  • urls:
  • https://github.com/sssinsi
  • https://twitter.com/sssinsi
  • https://qiita.com/sssinsi
  • 텍스트 구분 도구


    https://github.com/sssinsi/gohs
    독법: 오 수
    https://www.google.co.jp/search?&q=오수

    왜 그랬어


    Go 도구의 시작에서 간단히 할 수 있는 지령선 도구로 배워봤다.
    (어쨌든 손으로 뭔가 해보고 싶은 느낌)

    이렇게 나눠요.

    $cat a.file
    1
    2
    3
    4
    5
    
    $gohs -p a.file -c 3 -s=************
    1
    2
    3
    ************
    4
    5
    

    flag


    명령줄 도구를 만들 때 자주 사용합니다flag.
    간단하다
    https://github.com/golang/go/blob/master/src/flag/flag.go

    flag 사용 방법


    옵션은 -flag=x 또는 -flag x로 지정할 수 있습니다.
    $gohs -p sample.txt -c 3 -s=************
    1
    2
    3
    ************
    4
    5
    

    물론 이렇게 사용하셔도 됩니다.

    $gohs -p sample.txt -c 3 -s ************
    1
    2
    3
    README.md
    4
    5
    
    !?!?

    갑작스런 README.md


    까닭

    cmd -x *
    where * is a Unix shell wildcard, ....
    

    wildcard?


    와일드카드

    $ls
    README.md   main.go     sample.txt
    $ls *
    README.md   main.go     sample.txt
    $ls s*
    sample.txt
    
    그래.

    확인

    flag.parseOne()의 소스 코드를 읽어도 어디서 파일 이름이 되었는지 몰라fmt.Println(os.Args)의 시작 훈련main.go에서 명령을 수행하려고 한다.
    $go run main.go -p sample.txt -c 3 -s *
    [/var/folders/mp/cmn3_f0s5fgd6wns0ng1tfrh0000gq
    /T/go-build082551061/command-line-arguments
    /_obj/exe/main -p sample.txt -c 3 
    -s README.md main.go sample.txt]
    ...
    

    flag.Parse() 를 진행하기 전에 현재 디렉터리의 파일 일람을 선택할 수 있기 때문에 첫 번째 README.md 파일 이름을 문자열로 처리합니다.
    -s README.md main.go sample.txt
    
    그렇구나.

    대책

    *를 문자열로 사용할 경우 = 또는 "로 포위할 수 있습니다.
    $gohs -p sample.txt -c 3 -s=************
    $gohs -p sample.txt -c 3 -s "************"
    

    과거를 쫓아가다


    2017년 12월 12일 와일드카드 리뷰가 추가됐는데 의외로 최근이다.

    감사합니다.

    좋은 웹페이지 즐겨찾기