我有一個bash腳本(cygwin),它使用一些帶有空格的窗口路徑。因此,我在我的變量定義中用\放棄了這個空間。腳本中的所有內容都能正常工作但是,我需要將此變量作爲參數傳遞給命令行可執行文件。當我這樣做時,我的逃跑變得混亂了。如何在傳遞給命令行參數時在bash中轉義變量
非樣本功能腳本:
$ bash -x test.sh
+ destinationPath='/cygdrive/c/Documents and Settings/Eric/My Documents/'
+ attachments='\n2013-12-12.pdf'
+ body='Test Body'
+ [email protected]
+ args=
+ for file in '$attachments'
+ file=2013-12-12.pdf
+ touch 2013-12-12.pdf
+ mv 2013-12-12.pdf '/cygdrive/c/Documents and Settings/Eric/My Documents//2013-12-12.pdf'
mv: listing attributes of `2013-12-12.pdf': Invalid argument
+ args=' -a /cygdrive/c/Documents and Settings/Eric/My Documents//2013-12-12.pdf'
+ echo -e Test Body
+ email --from-addr [email protected] --from-name 'Automated CSS Downloader' --subject 'Downloaded new file(s) from CSS' -a /cygdrive/c/Documents and Settings/Eric/My Documents//2013-12-12.pdf [email protected]
email: WARNING: Email address 'and' is invalid. Skipping...
email: FATAL: Could not open attachment: /cygdrive/c/Documents: No such file or directory
所以,你可以看到在路轉義空間沒有被出口在$ args變量:從腳本
#!/bin/sh
# file paths
destinationPath="/cygdrive/c/Documents and Settings/Eric/My Documents/"
attachments="\n2013-12-12.pdf"
body="Test Body"
recipient="[email protected]"
# prepare attachments
args=""
for file in $attachments ; do
file=${file//[ \\n]/}
touch $file
mv $file "$destinationPath/$file"
args="$args -a $destinationPath/$file"
done
# send email
echo -e $body | email --from-addr [email protected] --from-name "Automated CSS Downloader" --subject "Downloaded new file(s) \
from CSS" $args [email protected]
輸出。我假設錯誤出現在「args = ...」行上。但我不確定如何轉義$ destinationPath以確保轉義字符得以保留。
我試過在destinationPath中使用雙引號(沒有轉義空格),但無濟於事。如果我嘗試在args =行中雙引號$ destinationPath,那麼輸出結果也會被一堆額外的引用搞砸。
我該如何得到這個工作?我嘗試過使用$ IFS變量,但我真的不知道自己在做什麼,並且似乎也無法使用它,儘管我懷疑該解決方案與某些方面有關$ IFS。
你試過雙逃脫的空間?例如。'Documents \\\ and \\'' –
我曾嘗試過,但遇到了幾個問題:1)我的mv不工作,因爲它試圖將文件移動到Documents \\和\\(即: bash吞下一次逃跑),並且在電子郵件表達式中擴展$ args然後變成:-a'/ cygdrive/c/Documents \'和'Settings \ Eric \ My \'Documents/AJ/CSS // 2013 -06-21.pdf。在每個空間裏,這都不起作用。 –
也許你可以將destinationPath加入雙引號並刪除轉義空格?和你一樣休息 – robson