提问人:Jonathan Chiou 提问时间:3/2/2014 最后编辑:CœurJonathan Chiou 更新时间:4/22/2018 访问量:344
bash:将模式存储在变量中,而不计算模式
bash: Storing a pattern in a variable without the pattern being evaluated
问:
我正在从命令行读取一个字符串,并将其存储到一个变量中。我遇到的问题是,当我尝试存储模式(例如 *.cpp)时,如果我当前目录中有匹配项,则变量最终将保留该模式的第一个匹配项,如果没有匹配项,则该模式。为了将模式存储到字符串中,我需要做什么?
问题代码:
pattern=$1
#say $1 is *.cpp
#what do I need to do to $1 for pattern to hold *.cpp rather than the 1st match to *.cpp
编辑:我确实用引号括了 1 美元,但我的结果与根本不使用引号相同。
作为可复制案例的问题:
#$1 is *.cpp
#!/bin/bash
pattern = "$1"
echo $pattern
模式不回显 *.cpp,但找到与该模式匹配的第一个文件。
答:
0赞
tonjo
3/2/2014
#1
传递参数时可以使用单引号,以便保留确切的字符串。
myscript.sh:
#!/bin/bash
echo $1
从 cmdline 调用:
# ./myscript.sh '*.cpp'
*cpp
反斜杠转义的结果也相同:
# ./myscript.sh \*.cpp
*cpp
2赞
Erik Vesteraas
3/2/2014
#2
做了一些测试。似乎您需要在调用和脚本中的使用中引用。即在脚本中:
pattern=$1
echo "$pattern"
然后在调用脚本时:
./test.sh "*.cpp"
结果:
*.cpp
评论
1赞
Karoly Horvath
3/2/2014
这就是 shell 的工作方式。如果执行 ,则 的第一个参数不会是 。它被扩展到潜在的许多参数。ls *.cpp
ls
*.cpp
上一个:管道问题(管道破裂)
下一个:保存复选框的状态,然后加载它
评论
pattern
*.cpp
$1
script '*.cpp'