select
次のように選択したいスペースを含む文字列のリストを作成しようとしています。
sel=""
while read l
do
sel=$(printf "%s '%s'" "$sel" "$l")
done< <(cd /some/data/directory;du -sh *)
select x in $sel
do
break
done
文字列はsel
予想:と似ています"597G 2022" "49G analysis" "25K @Recycle"
が、選択肢は次のとおりです。
1) "597G 3) "49G 5) "25K
2) 2022" 4) analysis" 6) @Recycle"
#?
私が達成したいのはもちろんです。
1) 597G 2022
2) 49G analysis
3) 25K @Recycle
#?
より一般的には、複数のデータソースから任意の方法で構成された文字列から選択できます。私は次のようないくつかの場所でインスピレーションを探しています。ここしかし、私の場合は合いません。
編集する
このbashはかなり古いことを言及するのを忘れていました(悲しいことに更新することはできません)。
[admin@CoMind-UniCron ~]# bash --version
GNU bash, version 3.2.57(1)-release (x86_64-QNAP-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
ベストアンサー1
シェルによって適切に分割される必要がある単一の文字列ではなく、複数の文字列の配列が必要です。このような:
#!/bin/bash
while read l
do
sel+=( "$l" )
done< <(cd /some/data/directory;du -sh *)
select x in "${sel[@]}"
do
break
done
これにより、予想される出力が生成されます。
$ foo.sh
1) 597G 2022
2) 50G analysis
3) 32K @Recycle
#?
改行を除く任意のファイル/ディレクトリ名を処理でき、少し複雑ですが、すべての場合に心配することなく使用できるより安全な方法です。
#!/bin/bash
while IFS= read -r l
do
sel+=( "$l" )
done< <(shopt -s nullglob dotglob; cd /some/data/directory && du -sh -- *)
select x in "${sel[@]}"
do
break
done