2017-01-31 24 views
0

美好的一天,如何在csh腳本中分配變量並將它們用作同一腳本的參數?

希望在這裏的任何人的善意幫助,在此先感謝。 我有T.csh看起來像這樣:

#! /bin/csh 

set a="01 02 03 04 05 06 07 08 09 10 11 12 13" 
set b="14 15 16 17 18 19 20 21 22 23 24 25" 
set c="01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25" 

set X = `grep $1 EOL.txt | head -n1 | cut -d- -f1` 
printf "$X\n$2\n$3\nYYYY\n1\nN\n" 

a,b和c的任選用作printf的行中的第三參數的變量。問題是,每當我嘗試運行腳本時,它都會顯示未定義的變量。這些設置的命令行在我以交互方式分配它們時正在工作,但在腳本內部,它似乎不起作用。也許我需要初始化它,但不知道如何。剛剛接觸這個編程的東西,我希望這裏有人能幫助我。提前致謝。

這裏有檢體執行和錯誤,供大家參考:

CAT-46{bc2}40>set a="01 02 03 04 05 06 07 08 09 10 11 12 13" 
CAT-46{bc2}41>./T.csh 4773 XXXX.XX "$a" 
62 
XXXX.XX 
01 02 03 04 05 06 07 08 09 10 11 12 13 
82869 
1 
N 
CAT-46{bc2}42>unset a 
CAT-46{bc2}43>./T.csh 4773 XXXX.XX "$a" 
a: Undefined variable 
CAT-46{bc2}44> 

如果我手動設置的變量,這是好的,但是當我要求它從腳本,其萎靡不振的不確定變量的錯誤。

麥克

+1

將您看到的確切錯誤粘貼到您的問題中。 – codeforester

+0

並顯示包含$ a,$ b,$ c的用法。基於昨天對於csh的另一個Q,我相信csh在變量賦值的空間中扼流。 (即使他們被引用)。因此,在花費大量時間之前,請確保您可以簡單地使用其中一個變量(其中包含空格)。請參閱http://grymoire.com/unix/csh.html獲取合理的csh教程,並討論爲什麼您可能想要使用'bash'。祝你好運。 – shellter

回答

0
prompt> unset a 
prompt> ./T.csh 4773 XXXX.XX "$a" 

的第一個命令, 「未設置一個」,刪除該變量。在第二個命令中,您嘗試讀取變量(在命令行上!)。這就是csh抱怨的原因。

+0

hi @linuxfan,我剛剛在那個例子中顯示set命令在我的shell上工作。在T.csh裏面,我也聲明瞭同樣的set命令,所以我期望它可以被調用,當我執行它時,但它不是。 – Mike

+0

不是。set **在T.csh中工作(假設csh真的在/ bin中 - 你確定嗎?)。但是,如果你交互式地做「取消設置」,然後「取消設置」,那麼**不能起作用。 – linuxfan

+0

對於這種情況,不需要修改變量。至於csh,它的in /​​ bin。任何想法爲什麼它顯示未定義的變量時,雖然執行T.csh腳本中的聲明? – Mike

0

我發表了另一個答案,因爲評論太短。看看下面的內容。

我有一個名爲/tmp/T.csh腳本:

#!/bin/csh 
set a="blah" 
echo $a 
  1. 我的shell是bash;我輸入/tmp/T.csh:結果是blah(csh執行腳本)。
  2. 仍在bash;我輸入unset a; /tmp/T.csh $a:結果是一樣的。
  3. 仍在bash;我鍵入. /tmp/T.csh:沒有結果(bash執行腳本)。
  4. I型csh;現在我在csh。
  5. 我輸入/tmp/T.csh:結果是blah(當然)。
  6. I型/tmp/T.csh $a: 「一:未定義變量」
  7. set a = something
  8. /tmp/T.csh $a:胡說
  9. echo $a:東西
  10. unset a
  11. echo $a: 「一:未定義變量」

我複製了你所做的一切;希望這可以幫助。 您在命令行上寫下的內容錯誤,而不是您腳本的內容。即使是一個簡單的echo,正如您在上面所看到的,如果您在命令行上引用了一個不存在的變量,則會出現錯誤。

+0

這是否意味着我不能調用a,b和c的值,除非我將它們設置爲交互式?是否有另一種方法在我需要它們作爲腳本參數時調用這些變量,因爲我已經將它們設置在腳本中了? – Mike

+0

我不明白你想要什麼。考慮一個csh腳本有它的局部變量,並且你從命令行傳遞給它_arguments_。可能是'setenv'是你的朋友,請閱讀它,或者如前所述,使用更加火熱的外殼。 – linuxfan

+0

好的,我選擇的命令在這裏可能是錯誤的,我真正想要的是將一組數字(與我的例子相同)分配給變量,對於這種情況,a,b和c稍後將用作我的參數腳本。我認爲設置可以做到這一點。任何想法我可以做到這一點?僱用其他的shell類型恐怕是不可能的,並且儘可能地沒有交互式設置變量。 – Mike

相關問題