我正在 SAS 宏中通过 X 命令运行 shell 脚本。我想在 shell 脚本中使用 SAS 宏中定义的宏变量。我知道如果我将该宏变量作为参数传递给 shell 脚本,我可以在 X 命令中解析它。
例如,我知道以下内容可以正常工作:
%macro a;
%let var1=test;
X "abc.sh &var1";
%mend;
%a;
使用这个 shell 脚本:
echo "value is $1" > myfile.txt
我想要的是:
%macro a;
%let var1=test;
X "abc.sh";
%mend;
%a;
使用这个 shell 脚本:
echo "value is &val1" > myfile.txt
有没有办法解决shell脚本中的宏变量?我做了研究,但找不到任何东西。
答案1
shell 将无法解析来自外部宏系统的变量,例如&val1
,就像您在示例中建议的那样。
你能从环境中获得 shell 使用价值。例如,如果您导出一个VAR1
包含内容的变量test
,那么您可以在以下位置使用它abc.sh
:
echo "value is $VAR1" >myfile.txt
(我只使用全部大写,因为这是 shell 中导出变量的通常约定,使用小写$var1
就可以了,只要导出的名称也是小写即可。)
您需要弄清楚如何从 SAS 导出变量(我没有 SAS 经验。)似乎SAS 支持setenv
语句或命令。setenv
某些 shell 通常使用它来导出变量,因此如果我尝试自己导出变量,我会在其中查找。