2492 some string continues here
に変換したいです。
2492
バッシュから。どうすればいいですか?
近いようですが動作しません。
var="2492 some string continues here "
echo ${var%[[:space:]]*}
答え1
使いたいスペースが複数あるので
${var%%[[:space:]]*}
# ...^^
削除最長スペースで始まる末尾の部分文字列
単にスペースを使用すると、%
文字列の最後のスペースであるゼロ文字以上の文字が続く最短スペースシーケンスを削除できます。
$ echo ">$var<"; echo ">${var%[[:space:]]*}<"; echo ">${var%%[[:space:]]*}<"
>2492 some string continues here <
>2492 some string continues here <
>2492<
ただ探しているなら最初の単語、次のようにすることができます。
read -r word rest_of_string <<<"$var"
echo "I have: $word"
IFS 変数を変更しなかったと仮定すると、先行スペースは処理されます。
答え2
%%
()の${var%% *}
代わりに%
()を使用する簡単な解決策があります${var% *}
。これにより、*
最初のスペース()の後のすべての内容が削除されます。
$ var='2492 some string continues here'
$ echo "${var%% *}"
2492
しかし、varの文字列の前にスペースがあると失敗します。以下を使用して先行スペースを削除できます。
$ var=$' \t 2492 some string continues here '
$ var="${var#"${var%%[![:space:]]*}"}"
$ echo "$var"
2492 some string continues here
$ echo "${var%%[[:space:]]*}"
2492
これは、スペースがスペースタブNLまたはCRの場合にも機能します。
正規表現
おそらくより強力な解決策は正規表現を使用することです。
$ var=$' \t 2492 some string continues here '
$ regex='^[[:space:]]*([^[:space:]]+)'
$ [[ $var =~ $regex ]] && var=${BASH_REMATCH[1]}
$ echo "$var"
2492
答え3
cut
区切り文字に基づいて文字列を切り捨てる簡単なツールを使用することもできます。
echo "$mystring" | cut -d' ' -f 1
どこ:
-d' '
区切り文字をスペースに設定-f 1
最初のフィールドを提供する(区切り記号に基づく)
答え4
bashコマンドと組み込みコマンドのみを使用するには、次のものを使用できます。内部フィールド区切り記号(IFS)と ソート
set -f # To prevent filename globbing when creating the array, as pointed out by Kusalananda in the comments
array=(2492 some string continues here)
set +f # enable it again
IFS=" "
echo "${array[0]}"
unset IFS