出力を分離する必要がありますが、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
分かれています。注文スペースと先行および末尾のスペースは無視されます。
その後、$B
Norの拡張から呼び出したくないので、引用する必要があります。$C
$(basename...)
printf '%3s %s\n' "$B" "$(basename -- "$C")"
--
また、オプションの終わりを表示することを忘れないでください。
引用符$C
($C
あなたの場合は${A[1]}
値が割り当てられていないため空です)を忘れたため、空の引数を渡し、basename
それについて文句を言う代わりに引数は渡されません。