簡體   English   中英

bash shell腳本:如何將參數列表分組為N個項目?

[英]bash shell scripting: How to group argument list into N items?

這里的用例是我想在一個循環中使用一組文件,例如*和構建arglists,一次是N 例如,

$ ls 
a.jpg
b.jpg
v.jpg
z.jpg
123.jpg
1234.jpg

N這里是兩個,我想運行例如command a.jpg b.jpgcommand v.jpg, z.jpg等。

我該怎么做?

for file in *; do
    command [???]
done

它不必使用for循環。 希望有一個我不知道的UNIX實用程序,它可以重新安排arg列表。 或許我必須用trIFS做一些奇特的事情。

如果我的文件以數字命名,或者如果我只是想使用數字而不是對全局擴展文件進行操作(這個例子有N = 3),我就可以這樣做:

for number in {0..10..3}; do
    echo $number $((number + 1)) $((number + 2))
done

這會產生......

0 1 2
3 4 5
6 7 8
9 10 11

請參閱xargs及其-n選項。

ls | xargs -n3 command

如果文件名包含空格,則可能需要-0選項並使用-print0 find以列出文件。

另一個選擇是使用bash數組:

files=(*)
for number in $(seq 0 3 $((${#arr[@]}-1)) ); do
    echo "${files[number]}" "${files[number+1]}" "${files[number+2]}"
done

這是一個非常干凈的方式純粹的bash ,沒有xargs ,並正確處理文件名中的空格:

set -- *
while [ $# -gt 0 ]; do
    file1="$1"; shift
    file2="$1"; shift
    # ./do_something "$file1" "$file2"
done

我采用手動直接字符串累積方法。 像這樣的東西。

我正在制作imagemagick腳本。

i=0
targdir=$2
accum=
for image in $(ls $1); do
    accum="$accum $image"
    if [[ $((i % 2)) -eq 1 ]]; then
        echo testing $accum
        accum=
    fi
    ((i ++))
done

暫無
暫無

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

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