catが出力した値を取得します。

catが出力した値を取得します。

catの結果を変数に保存すると、次のような結果が得られます。

wfpd=$'16213\r'

この結果を他のコマンドの引数として使用できるように数値に変換するにはどうすればよいですか?

答え1

パラメータ拡張を使用して末尾を削除できます\r%これは「値の末尾から削除」を意味します。

wfpd=$'16213\r'
wfpd=${wfpd%$'\r'}
((wfpd == 16213)) || echo Wrong

答え2

もしあなたなら知る$wfpd削除する必要がある値の末尾に文字があります。bashまたはzsh、busybox¹を使用している場合はshこれを行うことができます。

wfpd="${wfpd:0:-1}"

これにより、変数値の最後の文字が何でも削除されます。これは上記のシェルに固有の部分文字列拡張で、オフセット0から文字列から1を引いた最後の文字まで文字値に拡張されます。


1.28.0以降またはENABLE_HUSH_BASH_COMPATfor(デフォルト)でビルドされている場合hushENABLE_ASH_BASH_COMPATash

答え3

ksh93zshまたはを使用すると、bash次のものを使用できます。

wfpd=${wfpd//[^[:digit:]-]}

コンテンツから0123456789-を除くすべての文字を削除するには$wfpd(10進整数と仮定し、浮動小数点または16進数を調整する必要があります...)

POSIXlyでは、次のものを使用できます。

wfpd=${wfpd%%[![:digit:]-]*}

$wfpd0123456789- 以外の最初の文字で始まる部分を削除するか:

wfpd=${wfpd%"${wfpd##*[[:digit:]]}"}

小数点の最後の桁以降はすべて削除してください。

以下を行う代わりに:

wfpd=$(cat < file)

次のようにすることもできます。

IFS=$'\r' read wfpd rest_ignored < file

新しいプロセスを作成したりコマンドを実行したりすることなく、最初の行\rまでファイルの最初の行を読みます。$wfpd

答え4

変数名から数字を除くすべての項目を削除することもできます。変数名がというファイルに保存されると、file.txt次のことが行われます。

cat file.txt 
wfpd=$'16213\r'

cat file.txt | sed 's/[^0-9]*//g'
16213

関連情報