首页 > 解决方案 > 连接数组中的字符串

问题描述

我有一个已读入数组的全名。我正在尝试仅使用姓氏创建文件;姓氏可能包含应替换为下划线的空格。我的想法是创建一个文件名字符串,然后创建文件。我已经处理了只有一个姓氏的案件。我在使用带有空格的姓氏时遇到问题。这是我到目前为止所拥有的:

if [ "${#name_arr[@]}" -eq 2 ]; then
    for i in "${name_arr[@]:1}";do  # :1 because first element is their first name
        last_name=$i
    done
    echo $last_name
else
    for i in "${name_arr[@]:1}";do
        last_name=${last_name}_${i}
    done
    echo $last_name
fi

其输出将所有名称与下划线连接起来。所以而不是:

Doe
Austen
Vaughn_Williams
Doe

它在回响:

Doe
Austen
Austen_Vaughn_Williams
Doe

标签: arraysbash

解决方案


您不需要循环,也不需要检查列表的长度。只需用空格连接除第一个元素之外的所有元素即可获得姓氏。

last_name=${name_arr[*]:1}  # Assuming the default value of IFS
last_name=${last_name// /_}

以分叉为代价,您可以在一行中完成此操作。

last_name=$(IFS='_'; echo "${name_arr[*]:1}")

推荐阅读