Shell 一元运算符应具有多个参数

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

**您好,上面的代码试图在unix中模拟rm命令。其目的是删除该文件。 例如,如果我键入bash safe_rm file1,那么如果键入 bash safe_rm file1 file 2,它会提示我删除文件1两次,并为我提供第27行所需的一元运算符(如果[$input=“n”])。 为什么它不适用于两个文件,理想情况下,我希望它提示我删除file1和file2。 谢谢

应该是

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