如何使 $VAR 为空,这样它就不会影响命令行参数并且仍然在该参数内?

如何使 $VAR 为空,这样它就不会影响命令行参数并且仍然在该参数内?

这是 hsetroot 工作的基本设置: hsetroot -center /path/to/image/ - 仅使用图片设置壁纸。要使用这些选项,只需将一个选项放置在同一行参数中,仅使用这三个选项之一。 -flipd 、 -fliph 、 -flipv 总共提供了 4 个可在设置 hsetroot 时使用的选项,因此其中一个选项将为“void”或不存在。

因此,为了能够使用所有四个选项,需要放置在程序调用中的 $variable 必须“消失”,以便系统看不到它,而 $var 仍然放置在参数中由脚本调用。

案例陈述非常适合此工作。只需让 RANDOM 给你 4 个数字之一,然后 case 语句选择一个,或者该数字与它的大小写匹配,然后将其设置到 hestroot 的参数行中。

其格式为 hsetroot -flipd -center /path/to/image -- 为了取代必须手动更改该选项,我们只需使用 $var,然后在函数中重新分配相同的 $var,这样我们就可以消除打开终端或脚本并以不同的方式再次写入。现在我们可以使用该变量来代替提供给用户的所有四个选项来设置 hsetroot,如下所示: hsetroot $var -center /path/to/image

其中 $var 现在成为以下之一: 1) -fliph 、 2) -flipd 、 3) -flipv ,而 4) 第四个或最后一个选项根本就没有。

休斯顿,我们现在有问题了!

由于我们希望不必打开该脚本并手动更改它,因此我们必须让系统相信该行代码中编写的 $var 已不存在。它必须消失或变得不可见,这样它就不会影响正在寻找其需要的所有参数的程序,以便它能够无错误地运行。

我们该怎么做呢?

换句话说:

我有一个案例陈述,有 4 个选项,其中一个必须为“空”,以表明它甚至不存在。它是这样的:我遇到的问题是案例“0”,因为 $variable 必须保留在参数行内,但如果 R​​ANDOM 给变量赋予零值(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..]]... 带有 -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 ...
    

相关内容