확장 / 평가하지 않고 변수가있는 문자열을 에코합니다.


12

나는 모든 곳을 수색했다. 반향 및 인쇄를 시도했습니다. 작은 따옴표와 큰 따옴표를 시도했습니다. 그러나 데이터를 구문 분석하고 변수에 할당 한 다음 변수가 있는지 평가하고 싶습니다. 그런 다음 변수를 와일드 카드로 바꾸고 파일을 검색합니다.

예:

var="file.$DATE.txt"

### Where it goes wrong-  Needs to identify that $DATE is within the $var varaible.
test=$(echo "$var"|grep '\$')
if [[ $test ]]
then
    ### I would use whatever fix is discovered here as well
    test=$(echo $test|sed 's/\$[a-zA-Z]*/\*/')
fi

### (Actually pulling from remote machine to local)
cat $test > /tmp/temporary.file

여기 내 실패 중 하나 이상이 있습니다.

PROMPT> file=blah.$DATE
PROMPT> test=$(echo "$file"|grep '\$')
PROMPT> echo $test
PROMPT>
PROMPT>

나는 그것이 확장과 관련이 있다는 것을 알고 있지만 그것을 해결하는 방법을 모른다. 도움을 주시면 감사하겠습니다. 감사!


해결해야 할 것은 무엇입니까? 해당 var에는 확장되지 않은 $date?가 포함되어 있습니다 . 이를 위해 : var='file.$DATE.txt'. var를 사용할 때 날짜를 늘리려면? 나는 당신이 요구하는 것을 설명해야한다고 확신합니다.

변수가 "var"변수 내에 정의되어 있는지 테스트하십시오. 종류의 중첩.
krmarshall87

변수로 보이는 것을 즉시 제거하고 (필요한 것을 돌보지 않고) 와일드 카드로 sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
바꾸어 딜레마를 해결할 방법을 찾았습니다

답변:


20

$date변수 var 내부에 필요한 경우 :

var='file.$date.txt'

변수 안에 $를 유지합니다 :

$ echo "$var" | grep '\$'
file.$date.txt

8

변수를 작은 따옴표로 묶어 쉘 확장을 방지하십시오. 예 echo '$file'는 확장되지 않습니다 $file.

아래 코멘트 후 편집 :

를 사용 $하여 var변수 에서 부호 를 이스케이프 처리 할 수 ​​있습니다 var="file.\$DATE.txt".


확장하려면 한 단계 만 필요합니다. 단계별 원하는 결과를 추가하는 것을 잊었습니다. 그러나 $ file의 내용을 달러 기호 ($ DATE)로 평가하고 싶습니다.
krmarshall87

그것을 해결하기 위해 편집했습니다.
Munir

외부 소스에서 해당 데이터를받습니다. $를 \ $로 바꾸더라도 에코가 필요하다고 생각합니다. 그러나, 내가 파싱 할 때 그것을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.