相关疑难解决方法(0)

如何在Bash脚本中迭代参数

我有一个复杂的命令,我想制作一个shell/bash脚本.我可以$1轻松地写出来:

foo $1 args -o $1.ext
Run Code Online (Sandbox Code Playgroud)

我希望能够将多个输入名称传递给脚本.什么是正确的方法呢?

当然,我想处理其中包含空格的文件名.

bash command-line

838
推荐指数
8
解决办法
58万
查看次数

Bash中"$ @"和"$*"有什么区别?

在我看来,它们都存储了所有命令行参数.

两者之间有区别吗?

variables bash command-line-arguments

65
推荐指数
2
解决办法
3万
查看次数

$*和$ @之间的区别

可能重复:
bash中"$ @"和"$*"之间的区别是什么?

多年来,我曾多次在shell脚本的使用$*和犹豫之间犹豫不决$@.已经读了bash的手册页的适用部分,一遍又一遍,已经尝试都$*$@我或多或少完全无法理解两个变量之间的应用程序的实际差别.你能告诉我吗?

$*最近一直在使用,但不要问我为什么.我不知道为什么,因为我不知道为什么$@甚至存在,除了作为一个几乎完全的同义词$*.

有什么实际区别吗?

(我个人倾向于使用Bash,但对shell的选择保持不可知.就我所知,我的问题并不是Bash特有的.)

bash shell

29
推荐指数
3
解决办法
1万
查看次数

bash脚本中的$ @和$*之间的差异

我是bash的新手,我正在学习它,而且我怀疑使用$@和之间的真正区别S*.

我在这里红色Bash特殊参数

我知道两者都扩展到位置参数,但差异发生在双引号内.顺便说一句"$@" = "$1" "$2"..."$n"可能不同于"S*" = "$1$2...$n".

我尝试用一​​个简单的脚本来理解它:

if [ $# -gt 0 ]; then
       echo "Your command line contains $# arguments" 
else
       echo "Your command line contains no arguments"
       exit  fi

echo "Params are: "
echo $@  
echo $* 
echo "$@"    
echo "$*"
Run Code Online (Sandbox Code Playgroud)

如果我像这样在终端中执行我的脚本 ~./my_script par1 par2 par3

结果总是一样的:

Params are:
par1 par2 par3
par1 par2 par3
par1 par2 par3
par1 par2 par3
Run Code Online (Sandbox Code Playgroud)

也许我不明白这两个特殊变量的实际用途以及我的例子是否正确.我想用一个很好的例子来弄清楚这一点.

bash

5
推荐指数
1
解决办法
936
查看次数

$ @和$*之间的区别

我已经写了一个简单的脚本,需要在任意数量的参数来证明之间的区别$@$*:

#!/bin/bash                                                                
echo "double quoted $*     $@"
echo 'single quoted $*     $@'
Run Code Online (Sandbox Code Playgroud)

我在CLI上做了

$./stuff.sh a b c d e f dfs 
Run Code Online (Sandbox Code Playgroud)

这就是打印出来的东西

double quoted a b c d e f dfs     a b c d e f dfs
single quoted $*     $@
Run Code Online (Sandbox Code Playgroud)

既然它们是相同的那么意味着$@等于$*?还是有一点我错过了?

parameters bash command-line-interface

2
推荐指数
1
解决办法
3128
查看次数