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_COMPAT
for(デフォルト)でビルドされている場合hush
ENABLE_ASH_BASH_COMPAT
ash
答え3
ksh93
、zsh
またはを使用すると、bash
次のものを使用できます。
wfpd=${wfpd//[^[:digit:]-]}
コンテンツから0123456789-を除くすべての文字を削除するには$wfpd
(10進整数と仮定し、浮動小数点または16進数を調整する必要があります...)
POSIXlyでは、次のものを使用できます。
wfpd=${wfpd%%[![:digit:]-]*}
$wfpd
0123456789- 以外の最初の文字で始まる部分を削除するか:
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