【发布时间】:2020-12-10 15:54:39
【问题描述】:
我有以下脚本:
为简单起见,我删除了替换变量以更容易地显示当前行为:
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[@]}"
}
替换字符
这给了我以下输出:
Count Original: 2
Count Assigned: 1
Count Assigned Alternative: 1
Content Original: - .
Content Assigned: - .
Content Assigned Alternative: -
显然$searchers2 语法不正确,这是我预料到的,但用它来测试为什么$searchers 返回一项但“视觉上”与数组具有相同的输出。 em>
如何正确分配局部变量以接收数组作为输入?
我想最后做这样的事情:最好通过命令行提供参数 --- 但我假设在命令行上给出一个数组可能会有所不同
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[@]}"
【问题讨论】:
-
这个
local searchers="${CHARACTERS_SEARCHFOR[@]}"不会使searchers成为CHARACTERS_SEARCHFOR的数组副本。你需要local searchers=("${CHARACTERS_SEARCHFOR[@]}")。
标签: arrays bash variables replace