오류 메시지와 함께 매개변수 대체를 사용하고 있습니다 ${var1:?'some message'}
. 예를 들어 여러 줄의 오류 메시지를 병합했습니다. 현재는 작은따옴표로 묶고 Enter 키를 사용하여 개행 문자를 삽입하는 경우에만 올바르게 작동합니다. 여러 줄을 허용하고 개별적으로 저장할 수 있는 현명한 방법이 있습니까?
나는 단지 탐구하고 싶어 호기심을 느꼈습니다. 직접적인 관련이 없는 한 if 문과 관련된 대체 구문을 제안하지 마십시오.
사례:
작동: 작은따옴표
needed=${1:?'first error line
second error line
third error line'}
작동하지 않음: 다른 문자열 변수 호출
usage_message='Please use this script by providing the following arguments:
1: <e.g user name>
2: <e.g run script>
3: <e.g something else>'
username=${1:?$usage_message}
run_script_path=${2:?$usage_message}
where_to_save=${3:?$usage_message}
작동하지 않음: 함수 호출
function get_message {
echo -e "first line \nsecond line\nthird line"
# or
# printf "first line \nsecond line\nthird line"
}
needed=${1:? $(get_message)}
매개변수 대체에 대한 추가 논의: https://stackoverflow.com/a/77772942/13413319
답변1
하지만매개변수 확장을 위한 POSIX 표준이 문제에 대해서는 불분명하며 할당의 RHS는 bash 매개변수 확장이 수행되는 몇 안 되는 장소 중 하나입니다.아니요단어 분할 1은 일반적으로 수행됩니다 . 이 경우 단어 분할 2를 방지하려면 큰따옴표 여러 줄 변수 확장이 필요한 것 같습니다 . 그래서 비록
(인용되지 않음)
$ username=${1:?$usage_message}
bash: 1: Please use this script by providing the following arguments: 1: <e.g user name> 2: <e.g run script> 3: <e.g something else>
(선두)
$ username=${1:?"$usage_message"}
bash: 1: Please use this script by providing the following arguments:
1: <e.g user name>
2: <e.g run script>
3: <e.g something else>
당신은 또한 볼 수 있습니다언제 큰따옴표가 필요합니까?.
예를 들어
$ var=foobar $ username=${var/bar/$usage_message} $ declare -p username declare -- username="fooPlease use this script by providing the following arguments: 1: <e.g user name> 2: <e.g run script> 3: <e.g something else>"
분명히 와일드카드는 아니지만, 예를 들어
$ word=* $ username=${1:?$word} bash: 1: *