Bash
將日期命令傳遞給變數?
好的,所以我的問題如下,我希望通過這個:-
echo $(($(date +%s%N)/1000000))
可以將變數“a”添加到數組中,如下所示:-
a=$(($(date +%s%N)/1000000))
我這樣做的原因是想要使用 4 個隨機數字(隨機數)。我製作了這個 bash 腳本來展示一個例子。
#!/bin/bash for (( c=0; c<=10; c++)) do echo $(($(date +%s%N)/1000000)) sleep .5 done
哪個輸出:-(忽略前 9 位數字)
1622001937610 1622001938249 1622001938758 1622001939267 1622001939774 1622001940282 1622001940790 1622001941299 1622001941807 1622001942315 1622001942823
現在我想將這個實例的結果添加到一個數組中,從最後 9 位開始索引以接收 4 個基於納秒時間的隨機數字。
我似乎沒有完全掌握 bash 中用於實現結果的語法。我可以
date +%s%N)/1000000
直接呼叫數組嗎?因為我的想法是創建並清空數組,然後將結果附加到數組中,並從第 9 個數字開始索引。並將結果傳遞給我可以處理的第二個變數。只是學習將結果
date +%s%N)/1000000
轉換為變數將有很大幫助。很抱歉成為一個痛苦的人。提前謝謝你。
您可以使用
${var:offset:length}
參數擴展語法來提取值的子字元串:$ nanoseconds=$(date +%N) $ printf '%s\n' "$nanoseconds" "${nanoseconds:2:4}" 785455000 5455
或者,按照建議,使用 /dev/urandom:
$ tr -dc '[:digit:]' < /dev/urandom | fold -w 4 | head -n 10 8386 9194 3897 8790 4738 1453 4323 9021 6033 8889
mapfile
使用 bash命令將其讀入數組:$ mapfile -t numArray < <(tr -dc '[:digit:]' < /dev/urandom | fold -w 4 | head -n 10) $ declare -p numArray declare -a numArray=([0]="2851" [1]="9684" [2]="5823" [3]="5206" [4]="3208" [5]="2914" [6]="0395" [7]="4128" [8]="1876" [9]="5691")
我最初的方法是對
date
輸出使用字元串處理來獲取所需的值。這裡的版本使用數學處理(除以 1000000,模 10000)但我已經為你留下了評論#!/bin/bash items=() random=$(( ($(date +%s%N) / 1000000) % 10000 )) # Second and milliseconds # random=$( date +%s%N | grep -oP '....(?=......$)' ) items+=($random) # Append value to array echo "${items[0]}" # First array value echo "${items[-1]}" # Last (most recently appended) value declare -p items # Visual inspection of array elements