Bash
bash腳本中變數的空格
我在其中一個目錄名稱中有一個空格。我想從 bash 腳本中列出一個文件。這是我的腳本:
fpath="${HOME}/\"New Folder\"/foobar.txt" echo "fpath=(${fpath})" #fpath="${HOME}/${fname}" ls "${fpath}"
該腳本的輸出是:
fpath=(/Users/<username>/"New Folder"/foobar.txt) ls: /Users/<username>/"New Folder"/foobar.txt: No such file or directory
但是什麼時候列出我的shell上的文件它存在:
$ ls /Users/<username>/"New Folder"/foobar.txt /Users/<username>/New Folder/foobar.txt
有沒有辦法
ls
從我的腳本中顯示路徑?
只需刪除內部引用的雙引號:
fpath="${HOME}/New Folder/foobar.txt"
由於完整的變數內容包含在雙引號中,因此您無需再次執行此操作。它在 CLI 中工作的原因是 Bash 首先評估引號。它在變數中失敗,因為反斜杠轉義的引號被視為目錄路徑的文字部分。
有沒有辦法讓 ls 顯示腳本中的路徑?
是的,使用:
ls $HOME/New\ Folder/foobar.txt
問題是您在變數的值中包含引號。目錄的真實名稱沒有
"
引號。您只需要使用一種引用方法來建構變數。
在變數中:
fpath=${HOME}/New\ Folder/foobar.txt
或者:
fpath="${HOME}/New Folder/foobar.txt"
甚至:
fpath=${HOME}/'New Folder/foobar.txt'
完整腳本:
#!/bin/bash fpath=${HOME}/New\ Folder/foobar.txt echo "fpath=(${fpath})" ls "${fpath}"