既然您已經創建了文件1,你可以修改你創建的格式它使自己變得更容易以下列格式編寫所需的變量:
userID="Name Surname"
pwd=Passwd
study_id=test
isid=testid
然後,您可以使用點命令(Bourne Shell,Korn Shell,Bash)或源代碼(C Shell,Bash再次)將這些讀入到腳本中。請注意圍繞包含空格的值使用引號。您可能會使用單引號,但處理「Martin O'Rourke」更難。如果你不能信任數據源,那麼在安全之前有很多清理工作要做。
然後您需要指定變量如何傳遞給${CMD}
就行了。另一個棘手的問題是知道設置了哪些變量,因爲你大概只想傳遞那些變量而不是所有可能的變量。爭論中的空間使事情變得複雜化。如果你有Bash 4.x(3.x不夠),你可以使用關聯數組。
CMD="$FIX_HOME/shell.ksh"
declare -A array
. file1 # Set variable values
for name in $(sed 's/=.*//' file1) # Get variable names
do
x=$(eval echo "\$$name")
array[$name]="-$name=$x"
done
echo "================= Start ${CMD} ================"
${CMD} "${array[@]}"
echo "================= Exit from ${CMD} <$?> ================="
鑑於數據文件:
name="Martin O'Rourke"
id=21131
testid=P/23/41
isis=N23-45112
並且當與CMD=al
哪裏運行al
是呼應其參數,每行一個,從該輸出是如圖所示的程序 - 注意,參數不是在它們被輸入的順序:
$ bash-4.1 test.script
================= Start al ================
-name=name
-isis=N23-45112
-id=21131
-testid=P/23/41
================= Exit from al <0> =================
$
如果你有bash的早期版本,你需要使用一個索引數組,這可能^ h在命令行上的元素順序的優勢將是確定的。缺點是你需要生成不同的索引。
但是,這可能是過度複雜的事情。
CMD="$FIX_HOME/shell.ksh"
echo "================= Start ${CMD} ================"
${CMD} $(<file1)
echo "================= Exit from ${CMD} <$?> ================="
或者,如果你想要的破折號的選項名稱的前面:
CMD="$FIX_HOME/shell.ksh"
echo "================= Start ${CMD} ================"
${CMD} $(sed 's/^/-/' file1)
echo "================= Exit from ${CMD} <$?> ================="
有你可能要來解決這個其他方式,但它取決於你真正想看到的是您的${CMD}
的參數列表。
非常感謝喬納森 - 我已經做了你在第1步中提出的建議。我使用Korn shell不知道我使用的版本是否會處理關聯數組或索引數組。我正在考慮使用陣列,但我缺乏自信。我很欣賞你提供的樣品。 – Ayla 2011-02-26 23:13:02
我正在使用ksh shell:我需要生成不同的索引,因爲元素的順序在CMD行中很重要。我創建了以下內容 – Ayla 2011-03-04 01:44:36
我正在使用ksh shell:我需要生成不同的索引,因爲元素的順序在CMD行中很重要。我創建了以下$>對於$(cat myfile)中的wordlist,做 > wordlist [$ I] = $ word > I = $((I +1)) >完成 問題:我是否需要添加設置一個命令爲所有變量放置在同一個? – Ayla 2011-03-04 02:05:49