簡體   English   中英

如何在csh 中將If-else 語句寫在一行中?

[英]How to write If-else statement in one line in csh?

我使用 Cshell 並在 oneLine 中編寫 if else 語句。

If 語句執行成功,else 塊進入無限循環,無法退出返回到 promt。

有什么建議可以解決嗎?

/home/sun_cdmasee>if ( 25 == 25 )  then ; echo "yes" ; else  echo "no" ; endif

是的

別的?

別的?

別的?

手冊頁說這是不可能的:

(單詞elseendif必須出現在輸入行的開頭; if必須單獨出現在其輸入行上或出現在else 。)

不要嘗試在 csh 中編程。 甚至不要將它用作交互式 shell。

順便說一句,你可以退回到你的正常CSH鍵入以下命令提示符endifelse? 迅速的。

是的你可以!
在 tcsh (在最近的 Linux 發行版中總是可用的,甚至 MacOS

if ( $?debug_log ) echo "verbose output for debugging purposes ${shell_variable}"

盡管很老,但還是要回答這個問題,因為這是 Google 的第一個熱門話題,如果有人來尋找它,他們很可能會在這里結束。

手冊可能會說這是不可能的,但不是一個單一的 if,相同的功能可以通過相反的 ifs 來實現:

if ("a" =~ "b") echo "wrong"; if ("a" !~ "b") echo "right"

同樣可以應用於別名:

alias blabla 'if ("\!:1" =~ "bla*") echo "chat"; if ("\!:1" !~ "bla*") echo "quiet"'

是的,在 tcsh 中寫了十年以上的小東西之后,因為它幾乎用於任何事情,“不要用 csh 寫”的建議應該帶有大量的免責聲明,或者更好地形成“不要寫嚴肅的腳本”在 csh”中。 當它是您的外殼時,因為相關行業幾乎在任何地方都不支持其他外殼,這些光顧響應沒有任何用處。

注意:您可以通過輸入“endif”退出無限循環

  • 如果需要多次測試,可以避免相反的測試

  • “;” “if”分隔符可以用“&&”代替

  • 要執行多個命令,請使用 eval 來執行

  • 為了直接比較,可以使用“==”:

     alias ggg 'if(\:;1 == bla) eval "echo 'a'; echo 'x'": if(\;,1 == xxx) eval "echo 'b': echo 'c'"' for wildcards: use "=~"; alias ggg 'if(\;:1 =~ "bla*") eval "echo 'a'; echo 'x'" ; if(\!:1 =~ "xxx*") eval "echo 'b' ; echo 'c'"'
  • 對於條件運算符,使用“((”和“))”:

     alias ggg 'if((\::1 =~ "bla*" || \;;1 == "tutu")) eval "echo 'a': echo 'x'"; if(\!:1 =~ "xxx*") eval "echo 'b' ; echo 'c'"'

當心:如果沒有足夠的 args,將導致像Bad. arg selector. Bad. arg selector.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM