各出力を二重引用符で囲んだ配列値に保存したいと思います。値にはスペースを含めることもできます。
FOUNDFILES=($(locate --database ~/.locate.db -i -b "$INPUT"))
検索コマンドへの入力が非常に最新の場合(非常に最新の情報はファイル名です)。 「非常に最新」として保存する必要があります。非常にという単語を含む他のファイルもあります。したがって、heisveryなどの他のファイルがある場合は、「heisvery」のように保存する必要があります。ここで、「veryverylatest」は配列の0番目の値、「heisvery」は配列の値1です。
答え1
実際には、データの一部ではなく先行引用符と後続引用符で文字列(変数に)を格納する必要がある場合は非常にまれです。通常、後処理が最適です。
var='two spaces'
printf '# "%s"\n' "$var"
# "two spaces"
ary=( 'two spaces' '$USER' )
printf '# "%s"\n' "${ary[@]}"
# "two spaces"
# "$USER"
locate
出力へ正規化されたパス、
この-b
オプションは検索のみを意味します。第二asename、
あなたが望むただキャプチャするデフォルト名で、その部分を削除するために
使用できます。 sed
/pa/th/
「最新」を検索したいときいっぱいデフォルト名を入力
し、「very」も検索しようとしています。どこかに基本名には
本当に使うべきです正規表現探す。
-r
基本正規表現検索--regex
拡張正規表現の検索(下記の例で使用)
配列が行全体をキャプチャするには、次の変更を行う必要があります。私内部FフィールドS区切り記号(IFS)\n
のみが該当します。
配列項目が見つかると、キャプチャ/保存されます。場所出力。配列と同じ順序で並べ替えるには、input
配列の追加処理が必要です(次を介して)。for..grep..loop..awk次のような)。
input=( '^very very latest$' 'very' )
IFS=$'\n'; foundfiles=($(locate -i -b --regex "${input[@]}" | sed 's|.*/||'))
foundfiles=($(for((i=0;i<${#input[@]};i++))
do printf '%s\n' "${foundfiles[@]}" | grep -E "${input[i]}"
done | awk '!seen[$0]++'))
printf '%s\n' "${foundfiles[@]}"
出力 - 配列全体、つまりインデックス[0]と[1]を表示します。
very very latest
heisvery
欲しいなら印刷機能出力は引用符で囲まれています。最後の行を次に変更します。
printf '"%s"\n' "${foundfiles[@]}"
...または配列自体に引用符を追加する必要がある場合は、次のようにします。for..grep..loop
foundfiles=("${foundfiles[@]/#/\"}")
foundfiles=("${foundfiles[@]/%/\"}")
出力 - 配列全体、つまりインデックス[0]と[1]を表示します。
"very very latest"
"heisvery"
答え2
引用符が欲しくないと思います。私は改行文字ではなく空白でフィールドを分割したくないと思います。
実行方法は次のとおりです。 https://stackoverflow.com/questions/11393817/bash-read-lines-in-file-into-an-array
これは例です
$ IFS=$'\n' read -d '' -r -a FOUNDFILES < <(echo -e "very very latest\nsome other line")
$ echo "${FOUNDFILES[0]}"
very very latest
$ echo "${FOUNDFILES[1]}"
some other line
<(echo -e "very very latest\nsome other line")
それは本当にあなたのlocate
命令です。