저는 몇 달 동안 배쉬를 가르쳐 왔으며 변수에서 요소를 제거하는 동작에 대해 혼란스러워합니다. 여기 'shuf'를 사용하여 배열 요소를 지우는 데 혼란이 있음
테스트이다array=("one" "two" "three" "four");
unset array[`shuf -i 0-4 -n1`];
echo ${#array[@]}
I 가지는 문제, I는 해당 시험을 반복하면, 일반적으로, 그러나 동일한 반복, 3
(배열의 요소 수)을 초래할 것 인 일을 여러 번 (보통 20 개 미만)하면 결과는 4
이됩니다. 업데이트 :이 경우 실제로 아무것도 제거하지 않습니다.
내가 사용하는 경우 :
v=${array[`shuf -i 0-4 -n1`]}
echo $v
array=(${array[@]/$v/})
echo ${#array[@]}
나는 똑같은 문제를 얻는다. 경우에 따라 배열이 완전히 사라지고
${#array[@]}
이
3
을 반환하고 요소가 있던 곳이 없습니다. 드물지만
4
을 반환하며 값은 비어 있습니다. 테스트
echo $v
은 때때로 null 값을 반환하며 대개 예상대로 작동하고 숫자를 반환합니다. 문제가있는 곳은 여기에 있지만 왜 일어나는지 알 수는 없지만 요소의 수가 변경되지 않는 이유는 분명합니다.
내가 알고있는 문제는 shuf
입니다. 그냥 경우 :
unset array[2] #specify, instead of using 'shuf' to randomize
요소는 항상 사라지고 요소의 수는 항상 줄일 수 있습니다. 또한 shuf
에 대한 질문에는 일반적으로 사용법이 관련되어 있습니다.
누구에게도 익숙합니까? 사용법을 잘못 이해했거나 버그입니까? 어떤 단서 이유가 shuf
특히이 문제가 발생할 수 있습니까?
내가 알 수있는 한 shuf
은 유효한 숫자를 안정적으로 반환하므로 이론적으로 항상 올바른 숫자가 삭제됩니다. 그 이후의 동작은 무작위이지만 배열을 생성하려면 shuf
을 사용할 때만 중요한 이유를 아직 이해하지 못했습니다. 그래서 변수에 전달할 때 어떻게 든 인식 할 수없는 문자 나 무언가를 얻는 것처럼 보이고 null이 될 수 있습니다.
while [ true ]; do v=`shuf -i 0-4 -n1`; echo $v; done
, 나는 유효한 번호를. 그래서 변수에 전달할 때 어떻게 든 인식 할 수없는 문자 나 무언가를 얻는 것처럼 보입니다.
나는 작업에서 껍질을 벗긴 하나 이상의 컴퓨터에서이 작업을 시도했습니다. 하드웨어 문제는 아닙니다. –