我正在尝试用 bash 函数替换一些代码以重用它。所以我之前的代码是:
#!/bin/bash
set aline=" dsfsdf | fsdfff | yuhfd "
set line_parsed=`echo $aline | tr '|' "\n"`
echo ${line_parsed[1]}
哪个输出dsfsdf
.
现在,如果我尝试将句子放入函数中,我将无法正确执行:
#!/bin/bash
parseLine ()
{
set line_parsed=`$echo $1 | tr '|' "\n"`
echo ${line_parsed[1]}
}
set aline=" dsfsdf | fsdfff | yuhfd "
parseLine $aline
有语法错误吗?
答案1
要从字符串创建数组,请使用:
IFS='|' read -r -a line_parsed <<< "$aline"
IFS='|'
设置bash内部字段分隔符到|
read
从其标准输入文件描述符读取-r
反斜杠不充当转义字符。-a line_parsed
创建一个名为line_parsed
<<< "$aline"
是一个这里的字符串,它将 的内容传递$aline
给read
s 标准输入。
您现在将拥有一个数组。echo "${line_parsed[0]}"
将为您提供分割字符串的第一个元素。
所有这些都在一个函数中:
parseLine ()
{
IFS='|' read -r -a line_parsed <<< "$1"
echo "${line_parsed[0]}"
}
现在可以这样调用:
$ parseLine "dsfsdf | fsdfff | yuhfd "
dsfsdf