如何将shell脚本的输出存储到变量中

时间:2015-06-05 01:57:49

标签: bash shell awk

我正在尝试将我的shell脚本的输出存储在变量中。

echo "05/28/2015" | awk  -F '/' '{ print ($1 <= 12 && $2 <= 31 && match($3, /^[0-9][0-9][0-9][0-9]$/)) ? x="good" : x="bad" }'

我试过了:

x=$("05/28/2015" | awk  -F '/' '{ print ($1 <= 12 && $2 <= 31 && match($3, /^[0-9][0-9][0-9][0-9]$/)) ? x="good" : x="bad" }')

echo $x

但它不起作用

2 个答案:

答案 0 :(得分:1)

您忘记了echo

x=$(echo "05/28/2015" | awk  -F '/' '{ print ($1 <= 12 && $2 <= 31 && match($3, /^[0-9][0-9][0-9][0-9]$/)) ? x="good" : x="bad" }')
    ^^^^
echo "$x"

使用<<<将输入提供给awk。

$ x=$(awk  -F '/' '{ print ($1 <= 12 && $2 <= 31 && match($3, /^[0-9][0-9][0-9][0-9]$/)) ? x="good" : x="bad" }' <<< "05/28/2015")
$ echo "$x"
good

答案 1 :(得分:1)

$ x=$(echo "05/28/2015" | awk -F'/' '{ print ($1 <= 12 && $2 <= 31 && $3 ~ /^[0-9]{4}$/ ? "good" : "bad") }')
$ echo "$x"
good

但这可能是你真正应该使用的:

$ x=$(awk -v date="05/28/2015" 'BEGIN{ split(date,d,"/"); print (d[1] <= 12 && d[2] <= 31 && d[3] ~ /^[0-9]{4}$/ ? "good" : "bad") }' )
$ echo "$x"
good