그래서 나는 madlibs와 관련된 bash 프로그램을 작성하고 있는데, 예를 들어 단어의 첫 번째 발생을 대체하는 함수를 만들어야 합니다. 입력한 첫 번째 단어가 사과인 경우 이 함수를 사용하여 배로 바꿀 수 있습니다. Bash에서 이 문제를 어떻게 해결합니까? (배쉬에 아주 새로운)
function replaceFirst(){
#Code to go here
}
"sed"에 대해 뭔가를 봤지만 제가 말했듯이 저는 여기에 처음 왔기 때문에 어떤 도움이라도 좋을 것 같습니다!
답변1
한 단어를 다른 단어로 바꾸려면 와 같은 외부 명령을 사용할 필요가 없습니다 sed
. Bash 자체가 그 일을 할 수 있습니다.
function replace_first {
local user_input="$1"
local replace_with="$2"
set -f -- $1
local first_word="$1"
echo "${user_input/#$first_word/$replace_with}"
}
# read user input
read -rp 'Enter some text: '
# sample usage
replace_first "$REPLY" Hello
set
사용자가 입력한 첫 번째 단어에 쉽게 접근할 수 있도록 위치 매개변수를 재설정합니다. 이 -f
옵션은 파일 이름 확장을 방지합니다. 또한 $1
인용이 없다는 점도 참고하세요. 일반적으로 변수는 항상 인용해야 하지만 이 경우 토큰화가 필요합니다.
${parameter/#pattern/string}
문자열의 첫 번째 단어만 바꿉니다. 이는 동일한 단어가 문자열의 다른 곳에 나타나는 것을 방지하기 위한 것입니다.
Bash는 다음에 대한 세부 정보를 제공합니다.쉘 매개변수 확장.
입력 텍스트가 이라고 가정합니다 Hi there
. 출력은 다음과 같습니다.
$ Enter some text: Hi there
Hello there