나한테 이것들이 있다고 해봐세게 때리다스크립트의 기능:
foo(){
my_args_array=("$@")
export my_args="${my_args_array[@]}"
bar $my_args
}
bar(){
echo "number of args: $#";
}
foo a b 'c d e'
위 스크립트를 실행하면 다음과 같은 결과를 얻습니다.
매개변수 수: 5
하지만 내가 찾고 있는 것은 다음과 같습니다.
매개변수 수: 3
my_args_array[@]
그래서 내 질문은 - 각 요소를 작은따옴표로 묶을 수 있도록 반환된 값을 매핑하는 방법이 있습니까 ? 또는 환경 변수 문자열을 원래 명령줄 인수처럼 보이게 만들기 위해 필요한 모든 작업을 수행합니다.
답변1
문자열이 아닌 배열을 사용하십시오.
#!/bin/bash
foo(){
my_args=("$@")
bar "${my_args[@]}"
}
bar(){
echo "number of args: $#";
}
foo a b 'c d e'
답변2
Bash에서 "${array[@]}"
할당 오른쪽에 (or )를 사용하는 것은 (or )와 약간 비슷합니다. 공백을 구분 기호로 사용하여 배열 요소를 단일 문자열로 연결합니다. (( )는 사용된 첫 번째 문자(바이트?)입니다.) 이는 의 인수에도 적용됩니다."$@"
${array[*]}
"$*"
${array[*]}
"$*"
IFS
export
declare
local
a b c d e
그런 다음 에 들어가면 인용 my_args
되지 않은 확장이 분할됩니다.
배열을 원하면 배열을 사용하십시오.
foo() {
bar "$@"
}
bar() {
echo "number of args: $#";
}
foo a b 'c d e'
또는 문자열을 원하는 경우 명확성을 위해 명시적으로 사용하는 것이 좋습니다 "${array[*]}"
.