私がecho *
次の出力が表示されます。
file1 file2 file3 ...
私が欲しいのは最初の言葉を選ぶことです。どうすれば続行できますか?
あなたはそれをawkにパイプして、最初の単語をエコーさせることができます
echo * | head -n1 | awk '{print $1;}'
または、文字列を切り取って最初の単語を選択します。
echo * | head -n1 | cut -d " " -f1
または、sedを徹底的にパイプし、最初のWord以外のすべてを削除させる
echo * | head -n1 | sed -e 's/\s.*$//'
Nitpickersを満たすために| head -n1
を追加しました。文字列に改行が含まれている場合、重要なコマンドが渡された文字列から最初の単語を選択する前に、| head -n1
は最初の行を最初に選択します。
Posixyシェルを想定(/bin/sh
または/bin/bash
はこれを実行できます)
all=$(echo *)
first=${all%% *}
コンストラクト${all%% *}
は、substring Removalの例です。 %%
は、変数all
の右端から*
(スペースの後に何かが続く)の最長一致を削除することを意味します。文字列操作の詳細については、 ここ を参照してください。
このソリューションは、セパレーターがスペースであることを前提としています。ファイル名を使用してこれを実行している場合、スペースが含まれていると壊れます。
最初のfilenameではなく、最初のWordが本当に必要だと仮定すると、空白で壊れない方法は次のとおりです。
shopt -s nullglob
files=(*)
printf '%s\n' "${files[0]}"
位置パラメータを使用できます
set -- *
echo "$1"
次の選択肢のいずれかを確認します。
$ FILE=($(echo *))
$ FILE=$(echo * | grep -o "^\S*")
$ FILE=$(echo * | grep -o "[^ ]*")
$ FILE=$(find . -type f -print -quit)
その後、echo $FILE
。
参照: grep
出力からの最初の単語は?
最初のファイル名全体を取得する:
shopt -s nullglob
printf '%s\000' * | grep -z -m 1 '^..*$'
printf '%s\000' * | ( IFS="" read -r -d "" var; printf '%s\n' "$var" )