脚本中的 KSH88 变量

KSH88 variable inside script

我在使用 KSH88 时遇到问题

script="find . ! \( "$result" \) -mtime "$older" -xdev -type f -size +"$minsize"M -exec ls -lh {} \; | head -100 | awk '{print $8}' | sort -rn"

files_to_delete=`$script`

当我回显我的 files_to_delete 变量时,我得到:

find . ! \( -name '*.jar' -o -name '*.zip' -o -name '*.rar' -o -name '*.log' -o -name '*.xml' \) -mtime 10 -xdev -type f -size +100M -exec ls -lh {} \; | head -100 | awk '{print }' | sort -rn

这就是我想要的,当我在命令行上执行它时它可以工作,但是当我在我的 KSH 中执行它时我得到

find: bad option \(
find: [-H | -L] path-list predicate-list

把"eval "放在"$script"前面,这样就变成了

  files_to_delete=`eval $script`

这会强制 shell 评估命令字符串。

如果你的shell支持,最好使用files_to_delete=$(eval $script)。 ` 版本在快速扫描脚本时更容易错过,并且更难嵌套(命令中的命令)。