我无法弄清楚为什么我的脚本没有显示由空格分隔的字符串。
这是我的代码:
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"
答案 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