Bash-Script "잘못된 대체"의 문자열 교체

Bash-Script "잘못된 대체"의 문자열 교체

Bash 스크립트에서 기본 문자열 교체를 시도합니다.

#!/bin/bash
x="I love Linux"
echo "${x/Linux/Unix}"

내 Mac에서는 제대로 작동하지만 내 서버에서는 작동하지 않습니다. 다양한 사이트에서 다양한 예제를 시도했지만 항상 오류가 발생합니다. Bad substitution

내 배쉬 버전:GNU bash, Version 4.4.12(1)-release (x86_64-pc-linux-gnu)

내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변1

echo "${x/Linux/Unix}"1996년에 출시된 버전 2.0 이후 bash의 올바른 구문입니다.

Bash는 정확한 오류 메시지를 표시하지 않습니다 Bad substitution. 매개변수 대체와 같이 거의 보이지만 완전히는 아닌 것을 발견했을 때의 메시지는 약간 다릅니다.

$ bash -c '${}'
bash: ${}: bad substitution

반면, /bin/sh많은 Linux 시스템에서 구현되는 dash는 다음과 같은 정확한 메시지를 표시합니다.

$ dash -c 'echo "${x/Linux/Unix}"'
dash: 1: Bad substitution

오류는 다음과 같은 힌트로 충분합니다.쿠살라난다가 알아차린 것처럼, 실제로 이 스크립트를 프로그램으로 실행하는 것이 아닙니다. 아마도 sh또는 과 같은 일부 프로그램을 실행 /bin/sh하고 이 스크립트를 실행하도록 지시하는 것입니다. 귀하의 스크립트는 올바른 bash 프로그램이지만 올바른 sh 프로그램은 아니므로 sh가 bash와 동일한 기능 세트가 없는 다른 방언인 시스템에서는 작동하지 않습니다.

귀하의 스크립트는 독립형 프로그램입니다. 그만큼오두막스크립트 상단의 줄은 사용할 인터프리터를 시스템에 알려줍니다. 스크립트를 실행하려면 경로를 입력하거나, 명령 검색 경로( )에 있는 경우 파일 이름을 입력하세요 $PATH. 다른 실행 프로그램과 마찬가지로 스크립트(shebang 라인 포함)이든 아니든(커널이 자체적으로 실행하는 바이너리 1 ) 실행 권한( )이 필요합니다 chmod +x path/to/script. 어떤 이유로 독립 실행형 프로그램이 아닌 스크립트가 있고 이를 bash로 실행하려면 bash path/to/script가 아닌 를 실행하십시오 sh path/to/script.

1 또는 Linux의 binfmt_misc 메커니즘과 같이 파일 실행 방법을 전달하는 다른 수단을 사용합니다.

관련 정보