带空格的 CSH 变量在传递给另一个脚本时会中断

CSH variable with spaces bring broke up when passed to another script

我正在将一个变量(单引号内有空格)作为参数传递给另一个 csh 脚本,但它在第二个脚本中将它们分开。如果我在 tcsh 中手动 运行 同一行,它就可以工作。

spacetest.csh:

#!/bin/csh -vx
set SERVER = "UAT"
set SUBJECT = "'Test Report $SERVER'"
set MESSAGE = "testmessage.msg"
set ATTACHMENTS = "'-a file1.csv -a file2.csv'"
emailtest.csh $SUBJECT $MESSAGE $ATTACHMENTS

emailtest.csh:

#!/bin/csh
echo "1 "
echo "2 "
echo "3 "

因为我使用的是 -vx,所以它显示了参数的样子,但它仍在将它们分开。

输出包括:

/scratch/hr-finance/scripts/emailtest.csh $SUBJECT $MESSAGE $ATTACHMENTS
/scratch/hr-finance/scripts/emailtest.csh 'Test Report UAT' testmessage.msg '-a file1.csv -a file2.csv'
1 'Test
2 Report
3 UAT'

现在,如果我复制并粘贴该行 运行 它到 tcsh 中,它会按预期工作。

%emailtest.csh 'Test Report UAT' testmessage.msg '-a file1.csv -a file2.csv'
1 Test Report UAT
2 testmessage.msg
3 -a file1.csv -a file2.csv
%

如果我尝试使用 \" 代替,我会收到不匹配的双引号错误:

%set SUBJECT = "\"Test Report $SERVER\""
Unmatched ".

有什么想法吗?

修复是使用“eval”。

eval /scratch/hr-finance/scripts/CM_MAIL.csh $SUBJECT $MESSAGE $ATTACHMENTS