내 문제를 설명할 수 없습니다. 양해해 주시기 바랍니다. 명령을 호출하는 스크립트가 있습니다. 입력 파일 선택에 따라 명령줄에 추가 매개변수를 포함해야 합니다. 나는 이것을 시도했습니다 :
case "$model" in
CNRM-CM6-1|CNRM-ESM2-1)
trim_op="-selindexbox,2,361,2,293"
;;
EC-Earth3)
trim_op="-selindexbox,2,361,2,291"
;;
IPSL-CM6A-LR)
trim_op="-selindexbox,2,361,2,331"
;;
MPI-ESM1-2-HR)
trim_op="-selindexbox,2,801,3,403"
;;
MPI-ESM1-2-LR)
trim_op="-selindexbox,2,255,2,219"
;;
NorESM2-LM)
trim_op="-selindexbox,2,359,2,383"
;;
*)
trim_op=""
;;
esac
cdo -O remapcon,"$target_grid" "$trim_op" "$input_file" "$output_file"
그러나 배쉬는 그 빈 말에 목이 막혔다. Bash에서 이와 같은 작업을 수행하는 올바른 방법은 무엇입니까? 내가 한 일은 다음과 같습니다.
if [[ -z $trim_op ]] ; then
cdo -O remapcon,"$target_grid" "$input_file" "$output_file"
else
cdo -O remapcon,"$target_grid" "$trim_op" "$input_file" "$output_file"
fi
지금은 너무 무지한 것 같아요. 이거 이름이 있나요? 내가 검색할 때마다 표시됨정상에 오르다이것은 내가 찾고 있는 것이 아닙니다.
답변1
변수가 비어 있을 때 "$trim_op"
호출에서 매개변수를 제거 하려면 다음을 수행하면 됩니다.cdo
cdo -O remapcon,"$target_grid" ${trim_op:+"$trim_op"} "$input_file" "$output_file"
변수 확장${trim_op:+"$trim_op"}
다음으로 확장 "$trim_op"
(그런 다음 더 확장됨) trim_op
변수가 설정되고 변수의 값이 비어 있지 않은 경우.
답변2
"$trim_op"
변수의 값이 무엇이든 단일 인수로 확장됩니다. 따라서 trim_op
빈 문자열로 설정하면 빈 매개변수를 얻게 되며 대부분의 프로그램에서는 작동하지 않을 수 있습니다.
"$@"
"${array[@]}"
이는 가변 개수의 인수를 사용할 수 있는 및 확장 과 다릅니다 . 따라서 배열을 지원하는 Bash, ksh 또는 zsh와 같은 셸에서는 다음 중 하나를 사용하여 인수를 저장합니다.
예를 들어 Bash를 사용하는 경우
unset args
case "$model" in
CNRM-CM6-1|CNRM-ESM2-1)
args+=("-selindexbox,2,361,2,293") ;;
EC-Earth3)
args+=("-selindexbox,2,361,2,291") ;;
# *)
# nothing here ;;
esac
args+=("$input_file" "$output_file")
cdo -O remapcon,"$target_grid" "${args[@]}"
종종 사람들은 변수에서 두 개의 인수를 얻으려고 시도하면서 반대 방향으로 이 문제를 접하는데, 거기에 공백이나 와일드카드가 있으면 문제가 발생합니다.
당신은 또한 볼 수 있습니다
- 조건부로 인수를 스크립트에 전달
- 참조된 변수가 null인 경우 어떻게 null로 확장할 수 있나요?그리고
- 변수에 저장된 명령을 어떻게 실행할 수 있나요?명령 및 명령 매개변수를 변수에 저장하는 방법에 대한 기타 질문
답변3
일반적으로 공간이 없으므로 trim_op
다음을 수행할 수 있습니다.
cdo -O remapcon,"$target_grid" $trim_op "$input_file" "$output_file"
즉, $trim_op
참조되지 않습니다.
비어 있으면 trim_op
다음과 같이 실행되어야 합니다.cdo -O remapcon,"$target_grid" "$input_file" "$output_file"
답변4
$ cdo -O remapcon,"$target_grid" ${trim_op} "$input_file" "$output_file"
예를 들어 최근 누군가가 따옴표 없는 bash 변수 확장이 바로 내가 원하는 것이라고 지적했습니다 . 아야!