[英]How do I make a variable recognized in a string variable?
我有以下bash脚本
#!/bin/bash
Sunday="
'$number'apples
'$number'oranges"
Monday="
'$number'bananas"
# ... you get my drift
Wednesday="
'$number'bananas
'$number'oranges"
# ... Until Saturday
range={1..3}
function GetDay()
{
if [ $(date +%A) == "Sunday" ]; then Day=$Sunday
elif [ $(date +%A) == "Monday" ]; then Day=$Monday
elif [ $(date +%A) == "Tuesday" ]; then Day=$Tuesday
elif [ $(date +%A) == "Wednesday" ]; then Day=$Wednesday
elif [ $(date +%A) == "Thursday" ]; then Day=$Thurday
elif [ $(date +%A) == "Friday" ]; then Day=$Friday
elif [ $(date +%A) == "Saturday" ]; then Day=$Saturday
fi
}
function CountFruits()
{
for number in $range
do
GetDay
for day in $Day
do
echo $day
done
done
}
自周三以来,我希望它输出
1 bananas
1 oranges
2 bananas
2 oranges
3 bananas
3 oranges
如何使此脚本起作用。 识别我的范围似乎有些麻烦。 它输出
'' bananas
'' oranges
如果我将范围直接for number in {1..3}
而不是变量引用中for number in $range
'' bananas
'' oranges
'' bananas
'' oranges
'' bananas
'' oranges
眼前的问题是,每个day变量中的$number
都会立即展开,因此Sunday
的值实际上是
'' apples
'' oranges
您可能需要在外部使用单引号来防止扩展; 内引号只是常规字符。
但是,这是行不通的,因为变量中的字符串$number
也是文字文本。 当$Day
或$day
扩展时,它不会使用$number
的当前值扩展。
您需要的是一个功能:
dailyList () {
# $1 - day of the week
# $2 - a number
case $1 in
Sunday) fruits=(apples oranges) ;;
Monday) fruits=(bananas) ;;
# etc
esac
for f in "${fruits[@]}"; do
printf '%d %s' "$2" "$f"
done
}
然后,从循环中调用它:
CountFruits () {
for number in "$@"
do
dailyList "$(date +%A)" "$number"
done
}
CountFruits {1..3}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.