* 파라메타 사용시 문제점 (3줄짜리 쉘스크립트)

wizardis의 이미지

test.sh (아래 3줄이 내용)

#!/bin/sh
fnameDefault="-name *.cpp"
find . \( ${fnameDefault} \) -type f

위의 스크립트 test.sh를 실행시킬때 만약 실행 폴더에 cpp파일이 있으면 에러가 납니다.
그 파일들이 *.cpp 대신에 치환이 되어 버려서 에러가 납니다.

실제로 console에서도 아래와 같이 하면 에러가 납니다.
find . -name *.cpp -type f

이 에러를 피하기 위해서는 ..
find . -name "*.cpp" -type f

이렇게 "" 으로 싸줘야 문제가 안생깁니다.

그럼 쉘스크립트 안에서는 어떻게 해줘야 동작이 제대로 될까요??
(당연한 얘기지만 fnameDefault 변수를 사용하여 작성해야 합니다.., 단순히 \" 로 하면 동작안됩니다.)

고수 선배님의 조언 부탁드립니다.~

bushi의 이미지

[bushi@rose ~]$ echo "\"*.cpp\""
"*.cpp"
[bushi@rose ~]$

OTL
wizardis의 이미지

님말씀대로면 아래처럼 하는것인데..

fnameDefault="-name \"*.cpp\""

이렇게 해서 스트립트를 돌려보면 동작하지 않네요.
실제로 동작시키는건 script 파일이니깐요, 그걸로 동작을 해야해서요..

wizardis의 이미지

...

dormael의 이미지

제 환경에서는 알려주신 스크립트로도 잘 되는군요.

혹시 이렇게 하면 어떨까요?

#!/bin/sh
fnameDefault="-name *.cpp"
eval "find . \( ${fnameDefault} \) -type f"

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

wizardis의 이미지

님의 환경에서는 제가 말씀드린 script로도 잘 된다고 하셨는데요,..
중요한것은 그 script를 실행시키는 폴더에 .cpp 파일이 두개이상 있는 경우에 제대로 동작을 안하는 경우 입니다.
즉 script를 실행한 자식 폴더에만 .cpp가 있는 경우는 정상 동작합니다.

혹시 실행해 보셨을때 실행폴더에 .cpp 파일이 두개 이상 있었는지요??

아무튼 답변 감사드립니다.

dormael의 이미지

아 죄송합니다.
제대로 안 읽고 했네요. ㅡ,.ㅡㅋ

이렇게 하는건 안되나요?

#!/bin/sh
fnameDefault="-name \"*.cpp\""
eval "find . \( ${fnameDefault} \) -type f"

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

wizardis의 이미지

감사합니다. 잘 동작하네요
eval이 이런식으로도 쓰이는군요~ ^^

dormael의 이미지

혹시나 해서 찾아봤더니 이런게 있었군요. ㅡ,.ㅡㅋ

http://www.gnu.org/software/bash/manual/bashref.html#Filename-Expansion

간단히 해결하려면 아래와 같이 하는게 제일 좋겠네요.

#!/bin/sh -f

아 물론 sh -> bash 인 경우만 되겠네요.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

wizardis의 이미지

말씀해주신 옵션으로 하니까 잘 되는군요
저런 문서도 좀 봤어야 하는데 ㅎㅎ;;;
참 그리고 sh, bash 이나 둘다 -f 옵션은 동작하는군요
감사합니다.

김정균의 이미지

double quote 대신 single qoute를 사용하시면 될 것 같은데요.

wizardis의 이미지

저도 ', `, ", 를 적당히 조합하여 해봤었는데 안되더라고요..
답변 감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.