带空格的 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
我正在将一个变量(单引号内有空格)作为参数传递给另一个 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