文字列を空白文字に分割する(デフォルト名に奇妙な問題がある)

文字列を空白文字に分割する(デフォルト名に奇妙な問題がある)

出力を分離する必要がありますが、ps間隔があります。

#!/bin/bash

A=$(ps -r -e -o pcpu=,comm= | head -1)
B=${A[0]}
C=${A[1]}
printf '%3s  %s\n' $B $(basename $C)

出力は次のようになります。

 42 bar

代わりに、私は次のようになります。

usage: basename ...

これがうまくいかないのはなぜですか。

ベストアンサー1

文字列を空白文字に分割するには、分割+グローブ演算子を使用します。これはコマンド置換またはパラメータ拡張時に呼び出されますが、明らかにスカラー最大1つの値を格納できる変数。

 var=$(...)

スカラー変数の割り当てです。したがって、全体の出力は$var同じに割り当てられます${var[0]}。配列変数の割り当ての場合、次のようになります。

 var=($(...))

今すぐ呼び出す前に、通常どおりに調整する必要があります。

 set -o noglob # disable the glob part which you don't want here
 IFS=' ' # split on space only
 var=($(some command)) # invoke it

分かれています。注文スペースと先行および末尾のスペースは無視されます。

その後、$BNorの拡張から呼び出したくないので、引用する必要があります。$C$(basename...)

 printf '%3s  %s\n' "$B" "$(basename -- "$C")"

--また、オプションの終わりを表示することを忘れないでください。

引用符$C$Cあなたの場合は${A[1]}値が割り当てられていないため空です)を忘れたため、空の引数を渡し、basenameそれについて文句を言う代わりに引数は渡されません。

おすすめ記事