2014-11-20 2 views
1

${VAR}을 큰 따옴표로 묶어서 펼칠 수있는 방법이 있습니까? 내가보고 싶었던 게 아니에요bash에서 변수의 공백과 중괄호

:

물론, 내가 "$VAR" 같은 일반적인 표기법을 사용할 수 있습니다. 하지만 따옴표로 묶인 텍스트 등에서 따옴표를 사용하면 성가신 일입니다. 이중 따옴표를 사용하지 않고 ${...}"${...}"처럼 처리하는 $ {...} 표기법을 확장하는 방법이 있는지 궁금합니다.

+1

왜 "$ A"'와 같은 큰 따옴표를 사용하고 싶지 않으십니까? – DarkDust

+6

'$ {...}''과 정확히 똑같이 작동하는 하나의 표기법이 있으며, 그것은''$ {...} '''입니다. 똑같은 것에 대해 두 가지 표기법을 사용하는 것은 의미가 없습니다. –

+1

큰 따옴표를 사용하지 않으면 해결하려는 모든 문제에 대한 올바른 해결책이 될 것 같지 않습니다. – chepner

답변

1

쉘이 변수를 분할 할 때 IFS variable 을 공백으로 무시하도록 설정할 수 있습니다. 이는 루프에 공백이 포함될 수있는 입력을 가져올 때도 유용합니다. (당신이 globbing을 사용하지 않도록 설정 한 -f을 시도하여 문자열에 * 등의 문자가있는 경우 (감사 @glenn 잭맨.하지만 실제로는, 파일 이름에 * 퍼팅에 문제가 요구됩니다) 도움말 세트를 참조!)

$ cat /tmp/t.sh 
IFS="$(printf '\n\t')" 
A="some spaces in there" 
touch ${A} 
ls -l 
$ /tmp/t.sh 
some spaces in there 

그리고 원래 :

$ cat /tmp/t.sh 
#!/bin/bash 
A="some spaces in there" 
touch ${A} 
ls -1 
$ /tmp/t.sh 
in 
some 
spaces 
there 
$ 
+1

당신은 또한'set -f'를 사용하여 파일명 생성을 꺼버릴 수도 있습니다 :'A = "some * in there"; touch $ A'는 그렇지 않으면 문제가 될 것입니다. –

3

accepted best practice 다음 (쉘 정말 작품이 방법을 학습)을 물린 가능성이 높다 없습니다. 자꾸. 좀비 바이러스에 감염된 송곳니들.

$ printf '%q\n' "foo 'bar' baz"'nuu "boo" zoo' 
foo\ \'bar\'\ baznuu\ \"boo\"\ zoo 
  • 당신에게 :

    • 당신은 한 시작과 끝 따옴표 서로 옆으로 단일 매개 변수의 다른 부분에 대해 서로 다른 따옴표를 사용할 수 있습니다 도움이되는 몇 가지 것들

      $ a="some spaces in there" 
      $ (IFS= && touch ${a}) 
      $ ls -1 
      some spaces in there 
      
    : 전체 스크립트를 망쳐 방지하기 위해 서브 쉘에서 IFS을 설정할 수 있습니다3210