当我echo *
得到以下输出时:
file1 file2 file3 ...
Run Code Online (Sandbox Code Playgroud)
我想要的是挑出第一个词。我该如何继续?
Ban*_*uin 102
您可以通过 awk 将其通过管道传输并使其与第一个单词相呼应
echo * | head -n1 | awk '{print $1;}'
Run Code Online (Sandbox Code Playgroud)
或者您将字符串剪断并选择第一个单词:
echo * | head -n1 | cut -d " " -f1
Run Code Online (Sandbox Code Playgroud)
或者你把它通过 sed 管道并让它删除除第一个单词之外的所有内容
echo * | head -n1 | sed -e 's/\s.*$//'
Run Code Online (Sandbox Code Playgroud)
添加了| head -n1
以满足挑剔者。如果您的字符串包含换行符,| head -n1
则在重要命令从传递给它的字符串中选择第一个单词之前,将首先选择第一行。
sta*_*fry 40
假设有一个 posixy shell(/bin/sh
或者/bin/bash
可以这样做)
all=$(echo *)
first=${all%% *}
Run Code Online (Sandbox Code Playgroud)
该构造${all%% *}
是子字符串删除的示例。这%%
意味着*
从变量 的右侧删除最长的匹配项(一个空格后跟任何内容)all
。您可以在此处阅读有关字符串操作的更多信息。
此解决方案假定分隔符是一个空格。如果您使用文件名执行此操作,则任何带有空格的都会破坏它。
Chr*_*own 10
假设您真的想要第一个文件名而不是第一个word,这里有一种不会中断空格的方法:
shopt -s nullglob
files=(*)
printf '%s\n' "${files[0]}"
Run Code Online (Sandbox Code Playgroud)
您可以使用位置参数
set -- *
echo "$1"
Run Code Online (Sandbox Code Playgroud)
这有效:
echo * | grep -o "^\w*\b"
Run Code Online (Sandbox Code Playgroud)
来源:https://unix.stackexchange.com/a/57879/3920