"순수한" UNC(즉, 문자 그대로 백슬래시를 이스케이프 처리하고 싶지 않음)를 매개 변수로 사용하는 bash 스크립트를 만들고 싶습니다. 즉, 다음과 같습니다.
./foo \\my\share\is\here
그러나 당연히 위 스크립트는 다음과 같습니다.
\나의 공유는 여기에 있습니다
어떻게든 정확한 UNC를 매개변수로 읽고 이를 변수에 저장할 수 있습니까?
답변1
작은따옴표를 사용하세요.
[root@xxx601 ~]# ./stack \\my\share\is\here
You Gave Me: \myshareishere
[root@xxx601 ~]# ./stack '\\my\share\is\here'
You Gave Me: \\my\share\is\here
답변2
쉘 스크립트에서 ./foo
인수를 사용하여 명령을 실행하려면 어떤 형식을 사용해야 합니다.\\my\share\is\here
인용하다, 백슬래시 문자는 셸에서 특별한 의미를 갖기 때문입니다. 가장 간단한 인용 형식은 매개변수를 작은따옴표로 묶는 것입니다. 작은따옴표 쌍 사이의 모든 내용은 문자 그대로 처리되며 이런 방식으로 포함될 수 없는 유일한 문자는 작은따옴표 문자 자체입니다.
./foo '\\my\share\is\here'
스크립트가 있고 foo
인수를 사용하여 명령줄에서 실행하려는 경우 \\my\share\is\here
따옴표도 사용해야 합니다(명령줄은 셸입니다).
을 입력하면 ./foo \\my\share\is\here
무엇 foo
을 입력했는지 알 수 없습니다. 실행 중인 쉘은 foo
명령줄을 구문 분석하고 다음 공백이 ./foo
단어 구분 기호인지, 첫 번째 단어는 실행할 명령 이름, 두 번째 단어는 인수, 문자 순서는 백슬래시 + 무언가 형식인지 확인합니다. 역할을 나타내는 것입니다. 이는 귀하가 작성한 것과 동일한 현상입니다 foo ; bar
. 실행되는 쉘 명령이면 foo
문자열 을 bar
전달하지 않습니다 . 마찬가지로 인수를 사용하여 실행하십시오. 예를 들어 매개변수를 사용하여 실행하려면 해당 내용(또는 다른 변형)을 적어야 합니다.; bar
foo
./foo \\my\share\is\here
./foo
\myshareishere
./foo
\\my\share\is\here
./foo '\\my\share\is\here'
./foo \\\\my\\share\\is\\here
./foo '\'"\\m"y\\share'\is\'"here"""