回答:
あなたはそれをawkを通してパイプし、最初の単語をエコーさせることができます
echo * | head -n1 | awk '{print $1;}'
または、文字列を切り取って最初の単語を選択します。
echo * | head -n1 | cut -d " " -f1
または、sedを使用してパイプ処理し、最初の単語以外のすべてを削除します
echo * | head -n1 | sed -e 's/\s.*$//'
| head -n1
nitpickersを満たすために追加されました。文字列に改行| head -n1
が含まれている場合、重要なコマンドが渡された文字列から最初の単語を選択する前に、最初の行が最初に選択されます。
echo *
生成されるのだろうか?
-e
または-ee
...がリストに表示されるかどうか\n
、ファイル名に表示される時間に依存します。ファイルがあれば-n
、それも...すべてで任意の行を返さない可能性があります
touch '$a\nb' 'a\nb'; env BASHOPTS=xpg_echo bash -c 'echo * | wc -l'
(Unixに準拠する必要があるxpg_echo
場合bash
はいつでも有効です)。そして、別の空のディレクトリ:touch ./-n; bash -c 'echo * | wc -l'
。行は、改行文字で終了する一連の文字です。場合はecho
出力しない改行文字を行い、それが出力しない任意の行を行います。テキストユーティリティの挙動が好きcut
、awk
またはsed
最後の改行文字や行動が実装で変動した後の入力が余分な文字を持っている場合は指定されません。
posixyシェルを想定(/bin/sh
または/bin/bash
これを行うことができます)
all=$(echo *)
first=${all%% *}
コンストラクト${all%% *}
は、部分文字列の削除の例です。これ%%
は*
、変数の右端から最長一致(スペースの後に何かが続く)を削除することを意味しますall
。文字列操作の詳細については、こちらをご覧ください。
このソリューションでは、区切り文字がスペースであると想定しています。ファイル名を使用してこれを実行している場合、スペースを使用すると壊れます。
head
とcut
最初の単語ではなく最初のファイル名が本当に必要だと仮定すると、空白で中断しない方法があります:
shopt -s nullglob
files=(*)
printf '%s\n' "${files[0]}"
files=($(echo *))
bash
が、コンパイル方法や環境によっては、おそらくバックスラッシュ文字で中断します。
text=$(echo *); set -f; files=($text)
、それ以外の場合はより多くのワイルドカードを展開できます。
files=$(echo *); echo ${files%% *}
次の選択肢のいずれかを確認してください。
$ FILE=($(echo *))
$ FILE=$(echo * | grep -o "^\S*")
$ FILE=$(echo * | grep -o "[^ ]*")
$ FILE=$(find . -type f -print -quit)
その後、で印刷できますecho $FILE
。
ls
ファイル名の1つに空白が含まれている場合、使用は機能しません。