에코가 공백을 무시하게합니까?


1

temp1이라는 파일이 있습니다

   sCellEventTrap-03-27 트랩 유형-CAC 코드 : 01
        엔터프라이즈 컴팩
        변수 {scellNameDateTime,
                     scellSWComponent,
                     scellECode,
                     scellCAC,
                     scellEIP}
        기술
             "심각도 : 치명적-오류 또는 오류가 임박했습니다. 실제 디스크 드라이브에 ID 블록 불일치가 발생했습니다."
           -# TYPE "StorageCell 이벤트"
           -# SUMMARY "SCellName-TimeDate % s : SWCID % d : ECode : % d : CAC % d : EIP % d."
           -# 인수 {0,1,2,3,4,}
           -# 심각한 비판
           -# TIMEINDEX 136
           -# 상태 경고
        :: = 13600807

temp1에 이것을 적용

prvar = $ (awk '/ VARIABLES /, / DESCRIPTION / {gsub ( "VARIABLES", ""); gsub ( "DESCRIPTION", ""); gsub ( "}", ""); gsub ( "{", ""); gsub ( ",", ""); print; print ": % s"} 'temp1)

내게 줘 (내가 원하는 것)

에코 $ prvar

scellNameDateTime : % s scellSWComponent : % s scellECode : % s scellCAC : % s scellEIP : % s : % s

그러나 이것은 (원치 않는 형식)

에코 "$ prvar" 

             scellNameDateTime 
:%에스
                     scellSWComponent 
:%에스
                     scellECode 
:%에스
                     scellCAC 
:%에스
                     scellEIP 
:%에스

:%에스

내가 사용하는 생각 prvar에서 echo이 같은 텍스트와 함께

에코 "blah blah blah $ prvar"

내가하는 일을하기

blah blah blah scellNameDateTime 
:%에스
                     scellSWComponent 
:%에스
                     scellECode 
:%에스
                     scellCAC 
:%에스
                     scellEIP 
:%에스

:%에스

내가 인쇄하고 싶은 것

scellNameDateTime : % s scellSWComponent : % s scellECode : % s scellCAC : % s scellEIP : % s : % s

""prvar에 대한 것은 사용할 때 echo문제를 만들 수 있습니다. prvar가 바로 위 형식으로 인쇄되도록하려면 어떻게해야합니까?

편집
글쎄 그것이 내가 내 스크립트에 입력 어떤 변화를 만들 나던 밝혀 echo "$prvar"echo $prvar같은 일 --- 내가 원하지 않는 형식을 인쇄 할 수 있습니다. 터미널과 스크립트가 다르게 작동합니다. 이것에 대한 해결 방법이 있습니까?

답변:


1

매개 변수 확장 및 확장 글롭을 사용하여 공백을 "정규화"할 수 있습니다.

# enable extended globs so that +([[:space:]]) matches one or more whitespace
shopt -s extglob

# replace all occurances of one or more whitespace with a single space
prvar=${prvar//+([[:space:]])/ }

echo "blah blah blah $prvar blah blah"

이를 통해 변수를 안전하게 인용 할 수 있습니다. 변수를 인용하지 않으면 단어 분리 만 일어날 수있는 것은 아닙니다. 그들은 같은 글로브 문자를 포함 할 경우, 쉘은 또한, 파일 이름과 단어를 대체하려고 시도합니다 *, ?, [...].


0

echo에있는 모든 것을 인용 ( ") 할 필요는 없습니다. 많은 문자열을 가질 수 있습니다. 간단히 prvar를 인용하지 마십시오 :

echo "blah blah blah" $prvar

쉘 (echo가보기 전에 $ prvar을 확장하고 있음)에서 따옴표 안의 공백 ( ")은 유지되지만 따옴표 밖의 공백과 탭은 한 칸으로 줄어 듭니다.

echo "a        b"        d            e
a        b d e

이게 "blah blah blah $prvar blah blah blah"어때요? 그럼 내가 무엇을 할 수 있습니까?
SamFlynn

2
@ SamFlynn :echo "blah blah blah" $prvar "blah blah blah"
사이러스

글쎄, 스크립트에 입력 한 내용 echo "$prvar"echo $prvar바꾸지 않고 동일한 것을 인쇄합니다 .- 원하지 않는 형식입니다. 터미널과 스크립트가 이것에 대한 해결 방법과 다르게 작동합니까?
SamFlynn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.