我在使用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 $8}' | sort -rn
这就是我想要的,当我在命令行上执行它时它可以工作,但是当我在KSH中执行它时,我得到了
find: bad option \(
find: [-H | -L] path-list predicate-list
答案 0 :(得分:1)
将“ eval”放在“ $ script”前面,这样就变成
files_to_delete=`eval $script`
这将强制外壳程序评估命令字符串。
如果您的外壳支持它,则最好使用files_to_delete=$(eval $script)
。快速扫描脚本时,容易遗漏`版本,而且更难嵌套(命令中的命令)。