如何在shell脚本中将行分隔成具有空格的数组

时间:2017-04-12 14:58:34

标签: bash shell

我无法弄清楚为什么我的脚本没有显示由空格分隔的字符串。

这是我的代码:

While read -r row
do

   line = ($row)
   for word in $line
   do 
       echo ${word[0]}
   done
done < $1

说该行是“添加$ s0 $ s0 $ t1”

 i want the output to be "add"

3 个答案:

答案 0 :(得分:1)

While read -r row

这将尝试运行名为While的命令,您可能会收到错误。 shell关键字为while

do    
   line = ($row)

这将尝试运行一个名为line的命令,这是一个来自GNU coreutils(line - read one line)的程序,但可能不是你想要的。 shell中的赋值必须在等号周围有空格。

如果该分配有效,它将生成一个名为line的数组。

   for word in $line

只是按名称引用数组会扩展到它的第一项,所以这里的循环没用。

   do 
       echo ${word[0]}

在这里,索引不是很有用,因为word将是单个值,而不是数组。

我怀疑你想要的是这个:

while read -r row ; do 
    words=($row);
    echo "${words[0]}"
done

虽然$row包含像*这样的全局字符,但它们会扩展为匹配的文件名。

这会更好:

read -r -a words
echo "${words[0]}"

或只是

read -r line
echo "${line%% *}"     # remove everything after the first space

答案 1 :(得分:0)

这项工作很好:

while read -r row
do
  echo $row | awk '{print $1}'
done

while read -r row要求用户输入并将其存储在row变量中,awk '{print $1}'仅显示用户输入的第一个字。

答案 2 :(得分:0)

你想要每个令牌分开吗?为什么不使用core

core-test

如果你想要每行的第一个单词,那么:

src/main

如果是文件,则删除&#34; echo ... | &#34;并将文件名作为参数提供给sed:

src/test