.sh脚本无法正确返回变量

时间:2017-03-29 10:21:04

标签: linux bash shell echo alias

我创建了一个名为alias.sh的文件,我在其中输入了以下代码:

#!/bin/bash

OUTPUT="$(alias | awk -F'[ =]' '{print $2}')"
echo "${OUTPUT}"

每当我在终端中运行命令alias | awk -F'[ =]' '{print $2}'时,它都会以我的首选格式正确返回一组设置别名。

但是,当我执行像$ ./alias.sh这样的脚本时,它只返回一个空行。

如果我用alias | awk -F'[ =]' '{print $2}'命令替换ls命令,脚本就可以工作。它甚至可以保留换行符。

有人可以帮我理解为什么脚本没有返回预期的结果吗?

2 个答案:

答案 0 :(得分:2)

您在AWK脚本中使用$2。但是,它被shell替换为 shell 脚本的第二个参数,这是什么都没有。您需要逃避美元符号,如\$2中所示。或者不要在子shell周围使用双引号"

答案 1 :(得分:2)

错误的实际原因是因为当shell不是交互式时, alias 不会展开,

man bash页面

  

[..]当shell不是交互式时,不会扩展别名,除非使用shopt [..]

设置expand_aliases shell选项

将下面的行添加到脚本顶部以手动强制扩展。

shopt -s expand_aliases

然后 source 脚本而不是执行它,

#!/bin/bash

shopt -s expand_aliases

output=$(alias | awk -F'[ =]' '{print $2}')
echo "$output"

现在将脚本作为

来源
. ./myScript.sh