Shell
帶有來自命令替換的內容的回顯變數
我寫了一個非常基本的命令替換腳本,如下所示:
#!/bin/bash files=$(ls *.fastq); echo $files
該目錄包含一堆 .fastq 文件,我只想使用 echo 命令輸出它們
上面的 sript 輸出 fastq 文件,每個 fastq 文件名之間有一個空格。
當我以這種方式使用它時
#!/bin/bash files=$(ls *.fastq); echo "$files"
它在新行上列印結果。
為什麼會這樣?它與命令替換有關嗎?
謝謝
引用變數時,通常建議用雙引號將其名稱括起來。這可以防止重新解釋引用字元串中的所有特殊字元——除了
$
、```(反引號)和\
(轉義)。在雙引號中保留$
為特殊字元允許引用帶引號的變數(“$variable”),即用變數的值替換變數。使用雙引號來防止分詞。用雙引號括起來的參數將自身顯示為一個單詞,即使它包含空格分隔符。
例如
variable1="a variable containing five words" COMMAND This is $variable1 # Executes COMMAND with 7 arguments: # "This" "is" "a" "variable" "containing" "five" "words" COMMAND "This is $variable1" # Executes COMMAND with 1 argument: # "This is a variable containing five words"
僅當分詞或保留空格是一個問題時,才需要用雙引號將 echo 語句的參數括起來。
有關更多資訊和範例,請訪問此處
您有換行符,因為
ls
將它們放在不同的行上。換行符在沒有引號的情況下消失,因為 shell (bash) 將每個未加引號的空格分隔文本作為單獨的參數傳遞給命令。注意:命令替換是由 shell 完成的,**而不是由
ls
**完成的,所以你不需要ls
.因此你可以做
#!/bin/bash echo *.fastq
或者
#!/bin/bash files="*.fastq" echo "$files"