Shell 一元运算符应具有多个参数
**您好,上面的代码试图在unix中模拟rm命令。其目的是删除该文件。 例如,如果我键入bash safe_rm file1,那么如果键入 bash safe_rm file1 file 2,它会提示我删除文件1两次,并为我提供第27行所需的一元运算符(如果[$input=“n”])。 为什么它不适用于两个文件,理想情况下,我希望它提示我删除file1和file2。 谢谢 应该是Shell 一元运算符应具有多个参数,shell,unix,Shell,Unix,**您好,上面的代码试图在unix中模拟rm命令。其目的是删除该文件。 例如,如果我键入bash safe_rm file1,那么如果键入 bash safe_rm file1 file 2,它会提示我删除文件1两次,并为我提供第27行所需的一元运算符(如果[$input=“n”])。 为什么它不适用于两个文件,理想情况下,我希望它提示我删除file1和file2。 谢谢 应该是 read -p "remove regular file $@" input 这是最基本的 我更愿意这样做: re
read -p "remove regular file $@" input
这是最基本的
我更愿意这样做:
read -p "remove regular file $var" input
非常感谢,你的方法奏效了。但是你能告诉我为什么我的方法不起作用吗?我对unix非常陌生。@user3809938$@扩展到传递给函数或脚本的所有参数,即它表示$1、$2、$3等等。@user3809938学习bash脚本的一个快速方法是阅读,并始终参考(
manbash
)了解所有内容<代码>帮助也是一个很好的快速参考。另外,我假设您使用Bash是因为您使用-P
参数进行读取的方式。还要记住,bash
!=<代码>sh
。不要混淆两者是相同的。
read -p "remove regular file $var" input
for T in "$@"; do
if [[ -z $T ]]; then
echo "Target is null."
elif [[ ! -e $T ]]; then
echo "Target does not exist: $T"
elif [[ -d $T ]]; then
echo "Target can't be a directory: $T"
else
BASE=${T##*/}
DIRNAME=$(exec dirname "$T") ## Could be simpler but not sure how you want to use it.
INODE_NUM=$(exec stat -c '%i' "$T")
read -p "Remove regular file $T? "
if [[ $REPLY == [yY] ]]; then
# Just copied. Not sure about its logic.
mv "$T" "${T}_${INODE_NUM}"
echo "${BASE}_${INODE_NUM}:${DIRNAME}" >> "$HOME/.restore.info"
mv "${T}_${INODE_NUM}" "$HOME/deleted"
fi
fi
done