Bash

bash腳本中變數的空格

  • March 8, 2017

我在其中一個目錄名稱中有一個空格。我想從 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}"

引用自:https://unix.stackexchange.com/questions/350070