bash - 正确使用 $@

标签 bash unix variables

我正在尝试编写一个小脚本,它接受任意数量的命令行参数,打印出文件(而非目录)的 rwx 权限

我有的是

file=$@    
if [ -f $file ] ; then    
ls -l $file    
fi

然而,这只接受一个命令行参数。感谢您的帮助。

最佳答案

这里演示了 $*$@ 之间的一些区别,带引号和不带引号:

#/bin/bash
for i in $*; do
    echo "\$*: ..${i}.."
done; echo
for i in "$*"; do
    echo "\"\$*\": ..${i}.."
done; echo
for i in $@; do
    echo "\$@: ..${i}.."
done; echo
for i in "$@"; do
    echo "\"\$@\": ..${i}.."
done; echo

运行它:

user@host$ ./paramtest abc "space here"
$*: ..abc..
$*: ..space..
$*: ..here..

"$*": ..abc space here..

$@: ..abc..
$@: ..space..
$@: ..here..

"$@": ..abc..
"$@": ..space here..

关于bash - 正确使用 $@,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1575183/

相关文章:

javascript - JS 函数返回 false 变量,而本应为 true

bash - 使用空白 shell 脚本压缩多个文件

linux - 如何在 Unix 中创建附加到文件的 Shell 脚本?

linux - 复制路径中的文本 (Bash)

c - 在这些条件下设置变量原子

javascript - 如何从函数中取出变量? - Node

bash - 在馈送到 for 循环的大括号扩展范围内使用变量

javascript - API 路由在不应发生的情况下发生错误处理

linux - proc/diskstats 如何显示这些值?那么 proc/stat 和 meminfo 呢?

MySQL Galera 节点未启动(中止错误 'WSREP: [...]: 60: failed to reach primary view: 60 (Operation timed out)')