当我echo *
得到以下输出时:
file1 file2 file3 ...
我想要的是选出第一个单词。我该如何继续?
答案1
您可以通过 awk 进行管道传输并使其回显第一个单词
echo * | head -n1 | awk '{print $1;}'
或者你剪切字符串并选择第一个单词:
echo * | head -n1 | cut -d " " -f1
或者你通过 sed 进行管道传输并让它删除除第一个单词之外的所有内容
echo * | head -n1 | sed -e 's/\s.*$//'
添加 是| head -n1
为了满足挑剔的人。如果您的字符串包含换行符,| head -n1
则在重要命令选择传递给它的字符串中的第一个单词之前,将首先选择第一行。
答案2
假设有一个 posixy shell(/bin/sh
或者/bin/bash
可以做到这一点)
all=$(echo *)
first=${all%% *}
该构造${all%% *}
是一个示例子串删除。该方法从变量 的右端%%
删除最长的匹配项(一个空格,后跟任何内容) 。您可以阅读有关字符串操作的更多信息*
all
这里。
该解决方案假设分隔符是一个空格。如果您使用文件名执行此操作,则任何带有空格的文件都会破坏它。
答案3
假设你真的想要第一个文件名而且不是第一个单词,这是一种不会因空格而中断的方法:
shopt -s nullglob
files=(*)
printf '%s\n' "${files[0]}"