连接数组中的字符串

时间:2019-04-17 16:26:49

标签: arrays bash

我有一个全名,已经被读入数组。我正在尝试仅使用姓氏创建文件;姓氏可能带有空格,应使用下划线代替。我的想法是创建一个文件名字符串,然后创建文件。我已经处理过只有一个姓氏的案件。我在使用空白的姓氏时遇到麻烦。这是我到目前为止的内容:

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

2 个答案:

答案 0 :(得分:2)

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

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

您只需花费一分钱,就可以一行完成。

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

答案 1 :(得分:0)

尝试这种方法

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
    last_name=${name_arr[1]}
    for i in "${name_arr[@]:2}";do
        last_name=${last_name}_${i}
    done
    echo $last_name
fi

首先,在last_name中获取name_arr的第二个元素,然后使用循环将数组的其余元素添加到last_name变量中