waa*_*990 4 bash shell scripting
我有一个以"firstname lastname"格式从文件中读入的字符串.我想拆分字符串,并把它分成两个独立的变量$first和$last.最简单的方法是什么?
read可以进行拆分,例如
read first last < name.txt
echo "$first"
echo "$last"
Run Code Online (Sandbox Code Playgroud)
扩展fgm的答案,只要你有一个包含由单个字符分隔的标记的字符串,这些字符不是任何标记的一部分,并且由换行符终止,你可以使用内部字段separator(IFS)并将read其拆分.一些例子:
echo 'John Doe' > name.txt
IFS=' ' read first last < name.txt
echo "$first"
John
echo "$last"
Doe
echo '+12 (0)12-345-678' > number.txt
IFS=' -()' read -a numbers < number.txt
for num in "${numbers[@]}"
do
echo $num
done
+12
0
12
345
678
Run Code Online (Sandbox Code Playgroud)
一个典型的错误是认为它read < file等同于cat file | read或者echo contents | read,但事实并非如此:管道中的read命令在一个单独的子shell中运行,因此一旦read完成就会丢失值.要解决此问题,您可以使用相同子shell中的变量执行所有操作:
echo 'John Doe' | { read first last; echo $first; echo $last; }
John
Doe
Run Code Online (Sandbox Code Playgroud)
或者如果文本存储在变量中,您可以重定向它:
name='John Doe'
read first last <<< "$name"
echo $first
John
echo $last
Doe
Run Code Online (Sandbox Code Playgroud)