脚本中的 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)
。 ` 版本在快速扫描脚本时更容易错过,并且更难嵌套(命令中的命令)。
我在使用 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)
。 ` 版本在快速扫描脚本时更容易错过,并且更难嵌套(命令中的命令)。