コマンドライン引数に影響を与えずにその引数内にあるように$ VARを空白のままにするにはどうすればよいですか?

コマンドライン引数に影響を与えずにその引数内にあるように$ VARを空白のままにするにはどうすればよいですか?

これはhsetrootが機能するためのデフォルト設定です:hsetroot -center /path/to/image/ - 画像のみを使用して壁紙を設定します。これらのオプションを使用するには、3つのオプションのいずれかを使用して同じ引数行にオプションを配置します。 -flipd、-fliph、-flipvはhsetrootの設定に使用できる合計4つのオプションを提供するため、いずれかのオプションが「void」または存在しません。

したがって、4つのオプションすべてを使用できるようにするには、プログラム呼び出しに配置する必要がある$variableは、システムが見えないように「消える」必要があり、$ varはまだスクリプトのパラメータに配置されます。呼ぶ

ケースの説明はこの作業に適しています。 RANDOMに4つの数字のうちの1つを要求すると、Caseステートメントは1つを選択するか、その数字は大文字と小文字に一致してhestrootのパラメータ行に設定されます。

形式はhsetroot -flipd -center /path/to/imageです。 -- オプションを手動で変更する手間を置き換えるには、単に$ varを使用してから、関数から同じ$ varを再割り当てするだけです。スクリプトを作成して別の方法で書き直してください。これで、ユーザーに提供された4つのオプションのすべてではなく、この変数を使用して次のようにhsetrootを設定できます。 hsetroot $var -center /path/to/image

ここで $var は 1) -fliph , 2) -flipd , 3) -flipv と 4) 4 番目または最後のオプションのいずれかになります。

ヒューストン、今問題が発生しました!

スクリプトを開いて手動で変更する必要がないため、そのコード行に書かれた$ varがもう存在しないとシステムが信じるようにする必要があります。エラーなしで実行できるように、必要なすべてのパラメータを検索するプログラムに影響を与えないように、消えたり見えなくなったりする必要があります。

私たちは何をすべきですか?

言い換えれば:

4つのオプションがあるケースの説明があり、そのうちの1つは存在しないことを示すために「空でなければなりません」。これは次のように行われます。私が経験している問題は、$変数がパラメータ行内に残る必要があるため、「0」の場合です。ただし、RANDOMが変数にゼロ値(0)を割り当てると、「消えなければなりません」と同じように、プログラムが他のすべてのパラメータを使用して実行することができます。すべて試す準備が整いました。

setS="" and setS='' and setS="NULL" and unset -v setS

それらのどれも働かない

flipS()
{
 RANGE=3
 val=$RANDOM
 let  "val %= $RANGE"

 case $val in 
    1 )
        setS="-flipd"
          echo "$setS 1"
        ;;
    2 )

        setS="-fliph"
          echo "$setS 2"
            ;;
    3 )

        setS="-flipv"
          echo "$setS  -- 3"
            ;;
    0 )

         setS=' '
           echo "$setS   -- 4"
            ;;
esac
}
 flipS 

これは、画面設定をランダムに指定するhsetrootの構文です。hsetroot [command1 [arg1..]] [command2 [arg1..]]... with -flipvなど。後ろにはargが来ません。ちょうどそれ自体の中に入れてください。

注:私はhsetrootのほぼすべてのパラメータをランダムに使用するので、次のようなCaseステートメントを使用することはオプションではありません。

 RANGE=3
 val=$RANDOM
 let  "val %= $RANGE"

   cast $val in
  1 )
   hsetroot -flipd -center /path/to/image
   ;;
  2 )
   hsetroot -flipv -center /path/to/image
    ;;
  .......

ベストアンサー1

  1. 4つの場合(0,1,2,3)が必要な場合は、次のものが必要です。RANGE=4

  2. 単純化する:

    flipS() {
        local options=("" "-fliph" "-flipd" "-flipv")
        local index=$(( RANDOM % ${#options[@]} ))
        setS=${options[$index]}
    }
    
  3. setS空の文字列の場合、コマンドがこれを見ることができない方法でコマンドを使用するには、変数を参照しないでください。

    hsetroot $setS -anotheroption ...
    

おすすめ記事