
パラメータがあり、params
2つの変数が必要です。一つはparams
中にある単語用で、もう一つは=
中にない単語用です。=
params="step1 step2 step3 param1=1 param2=2 param3=3"
test=$(grep -o '\b\w*\=\b\w*' <<<$params)
echo -e "test: " $test
これは動作し、以下を提供します。
param1=1 param2=2 param3=3
しかし、否定的な部分は動作しません。 grep -oを使用する必要がある場合はどうすればよいですか?
これらはこれまでは効果がなかった
$(grep -o '\b\w*[^\=]*' <<<$params)
$(grep -o '\b\w*[^\=]\b\w*' <<<$params)
答えとしてこれが必要です。
step1 step2 step3
答え1
grep
これには適していません。もしあなたなら〜しなければならないこれを使用すると、次のことが機能します。
grep -Fv = <<<$(printf '%s\n' $params)
もしあなたなら〜しなければならない使用grep -o
:
grep -o '^[^=]*$' <<<$(printf '%s\n' $params)
- 上記は
bash
それぞれ1行にprint fromを使用しますが、この方法を使用する方が簡単です(の定義はの値によって異なります)。words
params
grep
words
IFS
awk
より良いかもしれません:
awk 'BEGIN{RS=" "} !/=/' <<<"$params"
または:
awk '{for(i=1;i<=NF;i++) if($i !~ /=/) print $i}' <<<"$params"
bash
配列パラメータを使用して直接これを実行できます。
paramsarray=( $params )
echo "${paramsarray[@]/*=*}"