Bash

將值列表傳送到 bash 腳本

  • October 8, 2020

我有一個腳本。myScript.

它需要兩個參數。myScript arg1 arg2.

假設我有三組論點。

argA1 argB1
argA2 argB2
argA3 argB3

有沒有辦法將每一行傳輸到 myScript. 我願意在一個文件中包含一組 args,也許使用 xargs。不確定要調查什麼。

所以我會像下面的假例子一樣執行命令:

cat myFile | xargs > myScript

沒有另一個腳本,只有命令行上的命令。

只是:

xargs -l1 <myFile myScript

-l1告訴每個輸入xargs行執行一次,該行上的單詞作為單獨的參數傳遞。myScript``1 l``1 l

對於xargs, 單詞用空格分隔,並且您仍然可以通過使用引號在單詞中包含空格(甚至換行符)。但是請注意,雖然xargs支持"...", '...'and\像大多數 shell 一樣引用,但它的解析與 Bourne-like shell 的解析不同。特別是,既沒有也沒有反斜杠處理,"..."只能'...'轉義\換行符。

例如,myFile可能包含:

word1.1 word1.2
"word 2.1" 'word 2.2'
"word'3.1" 'word"3.2'
'word"'"4'1" word\"4\'2
'word '\
5.1 "word "\
5.2

xargs -l1 <myFile printf 'First word: "%s", second word: "%s"\n'

會產生:

First word: "word1.1", second word: "word1.2"
First word: "word 2.1", second word: "word 2.2"
First word: "word'3.1", second word: "word"3.2"
First word: "word"4'1", second word: "word"4'2"
First word: "word
5.1", second word: "word
5.2"

使用 GNU 實現xargs,您可以將其改進為:

xargs -l1 -r -a myFile myScript

這樣做的好處是讓標準輸入保持不變並且myScript如果myFile為空則不執行。

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