bash
  • case-statement
  • 2016-01-05 79 views 0 likes 
    0

    我現在已經叫了幾個文件FILE1.TXT FILE2.TXT file3.txt使用bash case語句來刪除文件

    我想創建一個case語句來選擇要刪除和我目前有:

    files=" " 
    read number 
    
    case $number in 
    1) files=rm file1.txt ;; 
    2) files=rm file2.txt ;; 
    3) files=rm file3.txt ;; 
    *) files='this file does not exist' ;; 
    esac 
    echo $options 
    

    但是,每當我嘗試運行它時,它都會顯示一個錯誤,如「file1.txt:command not found」。

    任何人都可以解釋我在做什麼錯嗎?

    +0

    順便說一句,使用名爲'files'的標量變量來存儲(大概)一個*列表*文件是壞的。標量本質上只能存儲一個值;如果您依賴於能夠將空間上的值分割以獲取文件名列表,那麼在嘗試使用名稱中包含空格的文件時會感到非常失望。 –

    +0

    ......作爲讀者,我不清楚爲什麼你的腳本中有一個'files'變量。爲什麼不直接運行刪除? –

    +0

    我把這個標記爲重複的問題不是*完全* on-point本身,而是接受的答案直接解決了這個問題。 –

    回答

    0
    files=rm file1.txt 
    

    ...運行file1.txt與環境變量files設置爲值rm的命令。

    這通常是任何簡單命令前面有KEY=VALUE對這些對被視爲環境變量,僅在該命令的持續時間內設置。


    也許你不是想:

    files=file1.txt 
    

    ...或:

    files=() # create an empty array, not a scalar (string) variable. 
    read number 
    case $number in 
        1) files+=(file1.txt) ;; # or simply: 1) rm file1.txt ;; 
        2) files+=(file2.txt) ;; # or simply: 2) rm file2.txt ;; 
        3) files+=(file3.txt) ;; # or simply: 3) rm file3.txt ;; 
        *) echo "This file does not exist" >&2 ; exit 1;; 
    esac 
    
    # ...if collecting filenames in an array, then... 
    echo "Removing files:" >&2 
    printf ' %q\n' "${files[@]}" >&2  # ...expand that array like so. 
    
    rm -f "${files[@]}" # likewise 
    

    要理解爲什麼像cmd='rm file1.txt'將是 - 而正確的語法 - 很不好的做法,並開放自己的錯誤,見BashFAQ #50

    +0

    你的選擇只是把它作爲1)rm file1。 TXT等,完美的作品,非常感謝你! –

    相關問題