변수를 sed에 전달하고 백슬래시를 슬래시로 변경합니다.

변수를 sed에 전달하고 백슬래시를 슬래시로 변경합니다.

DFS를 통해 Windows 공유를 마운트하기 위해 bash 스크립트를 작성 중입니다 cifs. 내 주요 부분은 작동하지만 사용자가 DFS 경로를 변수로 입력하고 백슬래시를 슬래시로 변환해야 할 때 문제가 있습니다.

 #!/bin/bash

 FILE='\\edi3\welshch\test'

 FILEPATH="$("$FILE" | sed -e 's/\\/\//gp')"
 echo $FILEPATH

명령을 사용하여 AD 홈 디렉터리의 파일 경로를 찾은 다음 부분별로 sed로 파이프하는 또 다른 스크립트가 있습니다.| sed -e 's/\\/\//gp

그러나 위의 스크립트는 나에게 제공합니다. ./test.sh: line 10: \\edi3\welshch\test: command not found

답변1

명령 대체에서 "$FILE" | sed -e 's/\\/\//gp'쉘은 이를 (동일)로 확장합니다 '\\edi3\welshch\test' | sed -e 's/\\/\//gp'. 왜냐하면 그것은주문하다, 쉘은 run이라는 파일을 찾습니다 \\edi3\welshch\test.

파이프된 콘텐츠를 사용할 계획일 수도 있습니다 echo "$FILE" | sed ....FILEsed

이것이 올바르지 않더라도 일부 버전에서는 echo백슬래시를 이스케이프 문자로 취급하여 혼란을 줍니다. printf "%s\n" "$FILE" | sed ...모든 쉘에서 작동하려면 필요합니다 . 바라보다:왜 printf가 echo보다 나은가요?

또한 기본 동작은 sed작업을 수행한 후 줄을 인쇄하는 것입니다. /pon 명령을 사용하면 s///추가 인쇄가 발생하므로 출력에 결과가 두 번 표시됩니다.

즉, Bash를 사용하고 있으므로 문자열 대체 확장을 사용할 수 있습니다.

#!/bin/bash
FILE='\\edi3\welshch\test'
FILEPATH=${FILE//\\//}
echo "$FILEPATH"

출력을 제공합니다//edi3/welshch/test

답변2

단일 문자를 바꾸려면 사용하기가 더 쉽습니다.tr(1):

FILE=$(echo "$FILE" | tr '\\' / )

답변3

이 변수는 에코를 통해 sed로 출력되어야 합니다. sed 출력을 억제하는 데 사용됩니다 sed -n.편집하다sed -n- sed 플래그를 생략하면 필요하지 않습니다 p.

#!/bin/bash

FILE='\\edi3\welshch\test'

FILEPATH="$(echo "$FILE" | sed 's/\\/\//g')"
echo $FILEPATH

관련 정보