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