다음 스크립트가 있습니다.
단순화하기 위해 현재 동작을 더 쉽게 표시하기 위해 대체 변수를 제거했습니다.
declare -a CHARACTERS_SEARCHFOR=("-" ".")
declare -a CHARACTERS_REPLACEWITH=("X" "Y")
function replacerCharacters(){
local searchers="${CHARACTERS_SEARCHFOR[@]}"
local searchers2="${CHARACTERS_SEARCHFOR}"
echo "Count Original: ${#CHARACTERS_SEARCHFOR[@]}"
echo "Count Assigned: ${#searchers[@]}"
echo "Count Assigned Alternative: ${#searchers2[@]}"
echo "Content Original: ${CHARACTERS_SEARCHFOR[@]}"
echo "Content Assigned: ${searchers[@]}"
echo "Content Assigned Alternative: ${searchers2[@]}"
}
replacerCharacters
이것은 나에게 다음과 같은 출력을 제공합니다.
Count Original: 2
Count Assigned: 1
Count Assigned Alternative: 1
Content Original: - .
Content Assigned: - .
Content Assigned Alternative: -
분명히 $searchers2
구문이 잘못되었습니다. 예상했지만 항목 하나를$searchers
반환하는 이유를 테스트하는 데 사용 했지만 "시각적으로"는 배열과 동일한 출력을 가지고 있습니다.
배열을 입력으로 받기 위해 지역 변수를 올바르게 할당하는 방법은 무엇입니까?
나는 결국 이와 같은 일을하고 싶습니다 : 명령 줄로 인수를 우선적으로 제공하십시오 --- 그러나 명령 줄에서 배열을 제공하는 것이 다를 수 있다고 가정합니다
function replacerCharacters(){
local searchers="$1"
local replacers="$2"
for index in "${!searchers[@]}"; do
itemSearch="${searchers[$index]}"
itemReplace="${replacers[$index]}"
done
}
replacerCharacters "${SOME_OTHER_ARRAY[@]}" "${SOME_OTHER_REPLACERS[@]}"
배열을 입력으로 받기 위해 지역 변수를 올바르게 할당하는 방법은 무엇입니까?
변수가 로컬인지 글로벌인지는 중요하지 않습니다. 두 경우 모두 수동 배열 정의에서와 같이 괄호를 사용하십시오.
array=("${otherArray[@]}")
선호하는 명령 줄로 인수를 제공하지만 명령 줄에서 배열을 제공하는 것이 다를 수 있다고 가정합니다.
하나의 어레이를 제공 할 수 있습니다.
f() {
local x=("$@")
declare -p x
}
a=(1 2 3)
f "${a[@]}"
그러나 여러 배열의 경우 (에서와 같이 f "${a[@]}" "${b[@]}"
) 문제가 있습니다. 함수는 첫 번째 배열이 끝나고 두 번째 배열이 시작되는 위치를 알지 못합니다. 당신은 할 수 있습니다
f() {
local xlen="$1";
shift
x=("${@:1:xlen}") y=("${@:xlen+1}")
declare -p x y
}
...
f "${#a[@]}" "${a[@]}" "${b[@]}"
f "${a[@]}" , "${b[@]}"
배열에 나타나지 않아야 하는 구분 기호 ( )를 삽입하여 시작 / 끝을 나타냅니다 .f() {
local dpos=$(printf %s\\0 "$@" | grep -zFxnm1 DELIM | sed 's/:.*//');
x=("${@:1:dpos-1}") y=("${@:dpos+1}")
declare -p x y
}
...
f "${a[@]}" DELIM "${b[@]}"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다