2012-03-02 22 views
1

想象一下,你必須創建文件多行所有除了一個變量相同的文本文件中的創建文本bash腳本bash腳本傳遞的變量作爲自變量:使用參數

./my_script '1' 
./my_script '2' 
./my_script '3' 

這會產生這樣的:

foo text 1 bar text 
foo text 2 bar text 
foo text 3 bar text 

有關如何執行此操作的任何建議或示例?

+1

在我看來,有可能是表達你所要完成的代碼更好的方法。爲了創建N行文本,向腳本輸入N行調用似乎有很多工作。如果這就是你想要做的,那麼你的my_script就可以做一些像'cat >> output.file「foo text $ 1 bar text」'。或者你能更好地描述你可能真正想要的東西(?) – 2012-03-02 18:12:23

+0

這可能是一個可能的解決方案嗎? '因爲我在{1..3};做回聲foo文本$ i bar文本;完成' – Gandaro 2012-03-02 18:31:39

回答

1

http://tldp.org/LDP/abs/html/internalvariables.html#POSPARAMREF參見:

#!/bin/bash 

echo "foo text ${1} bar text" 
+0

{}不是必需的。 – jordanm 2012-03-02 18:47:59

+0

有一點額外的清晰度沒有任何問題。 – Sorpigal 2012-03-02 19:10:42

+0

@jordanm你是對的。沒有必要。但我總是習慣使用$ {VARIABLENAME}。恕我直言,它提高了可讀性並防止難以發現的錯誤。 – sgibb 2012-03-02 19:14:55

0

這將取決於您如何獲得「foo文本」和「欄文本」。如果設置靜態:

var="foo text $1 bar text" 
echo "$var" 

或者如果它是在不同的變量,你可以將它們連接起來:

foo="foo text" 
bar="bar text" 
output="$foo $1 $bar" 
echo "$output" 
1

它太瑣碎寫任務一個腳本。

這裏有幾個可能的解決方案:

for ((variable=1; variable<10; ++variable)); do 
    echo foo text $variable bar text 
done 

或...

for name in Dave Susan Peter Paul; do 
    echo "Did you know that $name is coming to my party?" 
done 
1

這可能會爲你工作:

printf "foo text %d bar text\n" {1..10} 
foo text 1 bar text 
foo text 2 bar text 
foo text 3 bar text 
foo text 4 bar text 
foo text 5 bar text 
foo text 6 bar text 
foo text 7 bar text 
foo text 8 bar text 
foo text 9 bar text 
foo text 10 bar text 

或本:

printf "foo text %s bar text\n" foo bar baz 
foo text foo bar text 
foo text bar bar text 
foo text baz bar text 
1

假設你堅持與蹩腳的模板文件:

perl -pe 'BEGIN {$count=0} s/\$variable/ ++$count /ge' file 
+0

非常好,正是我在找的東西:D – Bamboomy 2017-06-15 11:01:46