web-dev-qa-db-ja.com

Bashスクリプトは、数値から最初の数字を取得するのに役立ちます

数値から最初の数字を取得するにはどうすればよいですか?たとえば、25-25から「2」のみを取得します。

これは私が試したものです:

echo -n "Enter age: "    
read age    
echo $(s:0:1)
2
David Lloyd

POSIX互換ソリューション:

#!/usr/bin/env sh

printf "Enter age: "
read -r age
echo "$age"  
echo first digit: "$(echo "$age" | cut -c1)"

例:

$ ./script.sh
Enter age: 25
25
first digit: 2
1

sの代わりに誤った変数ageを使用しており、パラメーターの展開は中括弧${...}で機能します。

read -p "Enter age: " age
echo "${age:0:1}"
22
Freddy

最も基本的でPOSIX互換の方法(符号なしを想定)は次のとおりです。

echo "${age%"${age#?}"}"

一部のシェル(bash、ksh、zsh):

echo "${age:0:1}"

値に符号が含まれる可能性がある場合は、最初にそれを削除します。

$ age=+23
$ age=${age#[+-]}
$ echo "${age%"${age#?}"}"
2
6
Isaac

タイトルにbashと記載されているとおり:

#!/bin/bash

read -p 'Enter a number: '
printf '%.1s\n' "$REPLY"

これprints文字列の最初の文字$REPLYreadが読み取ります)。

これを別の変数othervarに保存するには、次を使用します

printf -v othervar '%.1s' "$REPLY"

他の人が言及しているように、単純な変数置換を使用することもできます。

printf '%s\n' "${REPLY:0:1}"

どこ 0は、データの引き出しを開始する文字列内のゼロベースの位置であり、1は、必要な部分文字列の長さです。

${REPLY:0:1}を別の変数に直接:

othervar=${REPLY:0:1}
2
Kusalananda