我有一个 Bash 脚本(Cygwin),它使用了一些带有空格的 Windows 路径。因此,我\
在变量定义中使用 a 转义了空间。
脚本中的所有内容都可以正常工作。但是,我需要将此变量作为参数传递给命令行可执行文件。当我这样做时,我的逃跑会变得一团糟。
示例非功能性脚本:
#!/bin/sh
# File paths
destinationPath="/cygdrive/c/Documents and Settings/Eric/My Documents/"
attachments="\n2013-12-12.pdf"
body="Test Body"
recipient="asdf@asdf.com"
# 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 nosender@mydomain.com --from-name "Automated CSS Downloader" --subject "Downloaded new file(s) \
from CSS" $args eric@mydomain.com
脚本的输出:
$ bash -x test.sh
+ destinationPath='/cygdrive/c/Documents and Settings/Eric/My Documents/'
+ attachments='\n2013-12-12.pdf'
+ body='Test Body'
+ recipient=asdf@asdf.com
+ 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 nosender@mydomain.com --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 eric@mydomain.com
email: WARNING: Email address 'and' is invalid. Skipping...
email: FATAL: Could not open attachment: /cygdrive/c/Documents: No such file or directory
因此,如您所见,路径中的转义空间没有被导出到 $args 变量中。我假设错误出现在“args = ...”行上。但我不确定如何转义 $destinationPath 以确保保留转义字符。
我尝试在destinationPath 中使用双引号(没有转义空格),但无济于事。如果我尝试在 args= 行中使用双引号 $destinationPath,那么输出也会被一堆额外的引号搞砸。
我怎样才能让它工作?我尝试过使用 $IFS 变量,但我真的不知道我在用它做什么,似乎也无法让它与它一起工作,尽管我怀疑该解决方案与 $国际金融服务协会。