이것은 hsetroot가 작동하기 위한 기본 설정입니다: hsetroot -center /path/to/image/ - 이미지만 사용하여 배경 화면을 설정합니다. 이러한 옵션을 사용하려면 세 가지 옵션 중 하나만 사용하여 동일한 인수 줄에 옵션을 배치하면 됩니다. -flipd, -fliph, -flipv는 hsetroot를 설정할 때 사용할 수 있는 총 4가지 옵션을 제공하므로 옵션 중 하나가 "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"인 경우입니다. 그러나 RANDOM이 변수에 0 값(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
4가지 경우(0,1,2,3)를 원하면 다음이 필요합니다.
RANGE=4
단순화하다:
flipS() { local options=("" "-fliph" "-flipd" "-flipv") local index=$(( RANDOM % ${#options[@]} )) setS=${options[$index]} }
setS
빈 문자열인 경우 명령이 이를 볼 수 없는 방식으로 명령을 사용 하려면 변수를 참조하면 안 됩니다.hsetroot $setS -anotheroption ...