Bash

將日期命令傳遞給變數?

  • May 26, 2021

好的,所以我的問題如下,我希望通過這個:-

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

引用自:https://unix.stackexchange.com/questions/651412