我有以下兩個腳本:
#script1.sh:
#!/bin/bash。
this_chunk=(1 2 3 4)
printf "%s
" "${this_chunk[@]}"| ./script2.sh
#script2.sh:
#!/bin/bash
while read -r arr
do
echo "--$arr"。
done
當我執行script1.sh時,輸出結果如預期:
--1
--2
--3
--4
這表明我能夠將陣列this_chunk的元素作為引數輸送到script2.sh。然而,如果我把呼叫script2.sh的行改為
printf "%s
" "${this_chunk[@]}" | xargs ./script2.sh
沒有輸出。我的問題是,如何使用xargs來傳遞陣列this_chunk,而不是簡單的管道?原因是,我將不得不處理大的陣列,從而處理長的引數串列,這將是一個管道的問題。
編輯:
#script1.sh。
#!/bin/bash。
this_chunk=(1 2 3 4)
printf "%s" "${this_chunk[@]}" | xargs -0 ./script2.sh
#script2.sh
#!/bin/bash #!
for i in "${@}"/span>; do
echo $i
done
uj5u.com熱心網友回復:
如何使用xargs傳遞陣列this_chunk
注意,
xargs默認會解釋'"和序列。要禁用這種解釋,要么預先處理資料,要么最好使用GNU xargs的-d ' '選項。-d選項不是POSIX xargs的一部分。printf "%s " "${this_chunk[@]}" | xargs -d ' ' ./script2.sh這就是說,用GNU xargs更喜歡零終止的流,以保留新行:
printf "%s" "${this_chunk[@]}"| xargs -0 . /script2.sh你的腳本
。./script2.sh忽略了命令列引數,而你的xargs在標準輸入關閉的情況下生成了行程。由于輸入被關閉,read -r arr失敗了,所以你的腳本沒有列印任何東西,正如預期的那樣。(注意,在 POSIX xargs 中,當生成的行程試圖從 stdin 讀取時,其結果是未指定的。)轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/324755.html
標籤:
