我正在呼籲迅速並行SGE的作業提交程序QSUB內bash命令行表達式。雖然這樣做,我試圖提交的表達式(作爲參數)到另一個腳本里面跑出像這樣:
./runArguments.sh的grep FOO跳回到bar.txt> output.txt的
runArguments.sh看起來是這樣的:
#!/bin/bash
${1} ${2} ${3} etc....to 12
的想法是,我想要的「grep FOO跳回到bar.txt> output.txt的」腳本進行評估......不是在命令大號INE。在上面的示例中,「grep foo bar.txt」將在runArguments.sh執行過程中進行評估,但輸出重定向將在命令行上進行評估。我最終發現了一個使用「eval」的工作解決方案,如下所示,但我不明白爲什麼它的工作原理。
問題(S)
1)爲什麼
./runArguments.sh eval "grep foo bar.txt > output.txt"
允許EVAL和表達被視爲參數,但
./runArguments.sh $(grep foo bar.txt > output.txt)
評估在命令行上在腳本被調用之前? ($(grep ...)的輸出被作爲參數代替)
2)有沒有更好的方法來做到這一點?
在此先感謝!
eval $ {@}提示非常有用,謝謝。我仍然不清楚爲什麼在命令輸入期間不評估eval。這有點像操作秩序的概念嗎?例如,bash是否執行1)命令替換2)使用參數執行腳本3)評估eval ...等?運行的程序(RAP)位於[eval
sequenceGeek
2012-02-03 02:28:51
@sequenceGeek:在命令輸入過程中,根本沒有理由評估'eval' *。你知道命令'echo cat foo'只是打印文本'cat foo',而不是運行程序'cat'?因爲'echo'是命令,'cat'只是其中一個參數。那麼,'eval'也不例外:它在運行時會有一些有趣的行爲,但是和其他任何命令一樣,只有在它是命令中的第一個單詞時纔會運行。 – ruakh 2012-02-03 03:03:41