2009-09-11 3 views
2

누군가 여기서 내가 무슨 일이 일어나고 있는지 설명해 줄 수 있습니까? 이 기본적인 질문 인 경우 죄송합니다, 내가 쓰기 위해 노력하고있어 파이프 라인 표현에서 단순화 :powershell에서 명령 실행에 관한 질문

$foo = pwd 
$cmd = "dir" 

& $cmd $foo #Works 

dir $foo #Works 

& "dir $foo" #Error 

* 용어 'DIR C : \'cmdlet에로 인식되지 않습니다, 기능, 실행할 수있는 프로그램을 , 또는 스크립트 파일. 용어를 확인하고 다시 시도하십시오. 행에서

: 1 문자 : 2 + & < < < < "디렉터리 $ foo는"*

dir pwd #Error 

*은 Get-ChildItem을을 : 경로를 찾을 수 없습니다 'C : PWD \'이 존재하지 않기 때문에 . 행에서

: 1 개 문자 : 4 + 디렉토리 < < < < PWD *이

나는 하나의 인자로 해석됩니다 같은 결과

따옴표
+0

"'? '$ cmd'를 어디서나 사용하는 것처럼 보이지 않습니다. –

+0

죄송합니다. 복사 붙여 넣기 오류입니다. $ dir은 $ cmd로되어 있습니다. – JasonHorner

+1

Invoke-Expression을 사용하거나() 또는 $() 또는 @()를 사용하여 이러한 종류의 문제를 해결할 수 있습니다. 디렉토리 (PWD) 디렉터리 $ (PWD) 의 dir $의 PWD (...이 사람이 왜 작동하는지 확실하지) 호출 표현 "디렉토리 (PWD)" 돈 : 예를 들어, 4 일 작업을 만들려면 Powershell로 너무 많은 이유를 물어볼 필요가 없습니다. 두통의 가치는 없지만 작동하고 실험 할 수있는 것들을 기억하십시오. – Mike

답변

5

식을 산출하기 위해 다음의 네 가지를 기대. 세 번째 명령에서 쉘은 "dir"인수에 "C:\"이라는 명령에 대한 요청이 아닌 "dir C:\"명령에 대한 요청으로 해석합니다. 당신은 임의의 스크립트를 포함하는 문자열이 호출 표현 cmdlet을 예를 사용하여 "실행"하려는 경우

5

:

호출 표현 "디렉터리 $ foo는"

$ cmd를 = "DIR '의 목적은 무엇
+1

Keith 다른 파싱 모드 (항목 7 Page 31)에 대해 이야기하는 전자 서의 섹션을 읽는 중입니다. 도움이됩니다. 그러나 나는 그것을 아직 분류하지 않았다. 나는 & 연산자가 Invoke-Expression의 단축키라고 생각했습니다. 그러나 더 많은 것을 찾을 수있는 곳에서 약간의 차이가 있다는 것을 알 수 있습니까? 나는 msdn 워드 프로세서를 시도했다; 그러나 그것은 많은 것을 추가하지 않았다. – JasonHorner

+2

&는 호출 연산자입니다. 단지 그 뒤에 오는 문자열을 명령의 "이름"으로 해석합니다. 따라서 문자열에 인수를 포함 할 수 없습니다. BTW 도트로 동일한 작업을 수행 할 수 있습니다. ". $ foo". 차이점은 새로운 중첩 범위에서 명령을 실행하게하고 도트는 현재 범위에서 명령을 실행한다는 것입니다. 이것은 명령이 스크립트 파일의 이름이나 경로 일 때만 중요합니다. –