shell传入带|的参数执行命令行失败
时间: 2023-10-06 12:04:31 浏览: 157
在Shell中,管道符`|`是用来将一个命令的输出传递给另一个命令作为输入的。因此,如果你想传递一个带有管道符`|`的参数给一个命令,你需要对这个参数进行转义,否则Shell会将管道符解释为管道操作符,而不是普通字符。
在Bash Shell中,你可以使用反斜杠`\`来转义管道符,例如:
```
$ command-with-pipe-arg some\|arg
```
这将把参数`some|arg`传递给命令`command-with-pipe-arg`。如果你需要在一个Shell脚本中传递带有管道符的参数,你可以使用双引号`"`或单引号`'`来括起来,例如:
```
#!/bin/bash
command-with-pipe-arg "some|arg"
```
或者
```
#!/bin/bash
command-with-pipe-arg 'some|arg'
```
这将保留管道符`|`作为参数的一部分,并将其传递给命令`command-with-pipe-arg`。
相关问题
shell传入带|的字符串参数执行命令行失败
当你在shell中传入一个带有管道符 `|` 的字符串参数时,shell会将其解释为一个管道操作符,而不是作为普通的字符串参数传递给命令。
为了避免这种情况,需要在字符串参数中对管道符进行转义,可以使用反斜杠 `\` 来转义,例如:
```
$ echo "hello | world"
hello | world
$ echo "hello \| world"
hello \| world
```
在这个例子中,第一个echo命令会尝试将字符串 `hello | world` 作为管道操作符进行解释,而第二个echo命令则使用了转义符 `\` 来转义管道符 `|`,使其作为普通的字符串进行输出。
#!/bin/bash alias whn='docker run -itd --name "$1" -h "$2" "$3"' 传入参数失败
你的脚本中使用了别名(alias)定义命令,这种方式不能接受参数。你可以将别名改为函数,函数可以接受参数。修改后的脚本如下所示:
```
#!/bin/bash
whn() {
docker run -itd --name "$1" -h "$2" "$3"
}
```
然后在命令行中执行该脚本,即可调用该函数并传入参数:
```
$ source your_script.sh
$ whn container_name host_name image_name
```
请注意,为了使定义的函数在当前 shell 中生效,需要通过 `source` 命令来加载脚本。
阅读全文