簡體   English   中英

如何打印源自 bash 腳本中的大括號擴展命令的數組?

[英]How to print an array originated from a brace expansion command in bash scripting?

#!/bin/bash

declare -a arr=({1..$(wc mylist.txt | cut -d " " -f 3)})

for i in "${arr[@]}";
do
        echo $i;
done

基本上我想要做的是使用大括號擴展命令設置一個數組。

命令是:

wc mylist.txt | cut -d " " -f 3

簡而言之,這個命令的作用是返回文件的行數,但它會帶來除實際數字之外我不需要的其他輸出。 所以我之后使用 cut 來獲取我在 wc 命令上需要的實際數字,在本例中為 7。

所以我在這里使用的大括號擴展(在我的理解中)應該給我帶來數字 1 到 7,如下所示:

declare -a arr=({1..7})

這應該轉化為這樣的一行:

declare -a arr=(1 2 3 4 5 6 7)

當我嘗試在for循環塊內打印這個數組時,我正在跳躍它會給我一個像這樣的output:

1
2
3
4
5
6
7

相反,這就是我得到的:

{1..7}

我怎樣才能得到正確的 output?

謝謝 M. Nejat Aydin 和 markp-fuso。 你的兩個建議都奏效了。

arr=($(seq $(wc -l < mylist.txt)))

或者

declare -a arr=( $(awk '{print FNR}' mylist.txt) )

通過一些調整,您的代碼可能會按預期運行。

調整:

  1. wc命令采用-l選項來計算行數。
  2. cut的目標是該wc命令 output 的第一個字段。
  3. 將該值分配給變量,但這可能只是樣式問題。
#!/bin/bash
total=$(wc -l mylist.txt | cut -d " " -f 1)
declare -a arr=( $(seq 1 "$total") )

for i in "${arr[@]}"
do
        echo "$i";
done

Output:

1
2
3
4
5
6
7

大括號擴展對我也不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM