我正在努力尝试使用简洁的比较语句来避免一堆"如果a = b或a = c或a = d或a = e"等.
相反,我正试图像在perl中那样使用正则表达式和模式匹配.
同
设置st ="红色"
这条线
if($ st = ~yellow | blue | red | green)
只是不起作用(如果:表达式语法.)我尝试使用引号,括号,但我没有得到预期的结果,如果没有错误.
有没有办法避免沉重的构造:
if($ st == yellow)|| ($ st == blue)|| ($ st == red)|| ($ st ==绿色)?
或者另一种问同样问题的方法:tcsh是否允许类似"如果字符串a包含字符串b"?我在tcsh引用中找不到任何子字符串的概念.
太感谢了!
我需要遍历一堆不同的场景(变量情景),但无法弄清楚如何在tcsh shell脚本中使用if语句.获取错误"if:Expression Syntax"有人可以告诉我我的错误吗?简化代码如下!谢谢!
#!/bin/tcsh -f
#
set val = 0
foreach scen ( a b )
echo $scen
if ($scen==a) then
echo $scen
else
echo $val
endif
end
Run Code Online (Sandbox Code Playgroud) 如果我想从linux/unix中的给定根目录中删除具有给定名称的所有子目录,您会认为您可以发出如下命令:
rm -rf /base-dir-path/*/work
Run Code Online (Sandbox Code Playgroud)
但是,在搜索名为"work"的任何子目录时,上面的命令只会深入1个目录.为了实现我想要的,我最终用额外的'*/'重复相同的命令,直到rm返回'rm:No match.',EG:
rm -rf /base-dir-path/*/*/*/work
Run Code Online (Sandbox Code Playgroud)
有没有办法在其通配符搜索中获得rm匹配的命令,/这样我只需要发出一个通配符*?
是否有一行命令tcsh来更改一组文件的扩展名?在各种DOS shell中,我曾经使用过以下内容:
ren *.abc *.def
Run Code Online (Sandbox Code Playgroud)
这将重命名.abc以end 结尾的所有文件,而不是.def.在sed而言,这将执行类似如下:
sed -e 's/\(.\)*\.abc$/\1.def/'
Run Code Online (Sandbox Code Playgroud)
在文件名上.我可能会把零碎的东西放在一起以实现*nix中类似的东西,但我猜这里的问题是我缺乏经验tcsh.
任何帮助赞赏.
我是Unix shell环境中编程的新手,我对如何获取目录大小提出了疑问.我读过你可以做的命令如:du,du -b等.但是,当我尝试将它放在我的程序中时,它会以某种方式返回路径名而不是实际的目录大小.这就像连接不起作用或其他东西..garbage文件肯定在我的主目录中,所以我不知道问题是什么.这可能是我忽略的一些愚蠢的错误.如果有任何一双新眼睛或有UNIX经验的人可以为我看看这个我会非常感激!这是我的shell代码:
#!/bin/tcsh -f
set n = 1
mkdir -p ~/.garbage
while ($n <= $#argv)
if ( -d $argv[$n] ) then
echo "$argv[$n] is a directory and cannot be removed"
else
mv $argv[$n] ~/.garbage
echo "The file moved to the garbage directory was: "$argv[$n] "\n"
endif
@ n++
end
echo "The garbage bin's size is: " du ~/.garbage "bytes."
Run Code Online (Sandbox Code Playgroud) 我的文件名看起来与此类似
name_1.23.ps.png
Run Code Online (Sandbox Code Playgroud)
要么
name_1.23.ps.best
Run Code Online (Sandbox Code Playgroud)
要么
name_1.23.ps
Run Code Online (Sandbox Code Playgroud)
我想最后摘下随机文件扩展名,只剩下
name_1.23.ps
Run Code Online (Sandbox Code Playgroud)
与此类似的其他问题使用'。'。作为Delimator,但这会删除name_1之后的所有内容。
我想在命令行(在tcsh或bash中)执行此操作
看起来像是在bash中alias-expand-line。
我可以添加到.cshrc_custom文件中的bindkey命令是什么?
相关排序:"^[y"按键绑定指的是什么?我知道^是ctrl什么,但是是什么[?
我工作,tcsh并希望在Unix命令行中向前导航,向后导航.
谷歌搜索显示Alt+ f,Alt+ b向前移动一个单词并向后移动一个单词.但它在Unix命令行上不起作用.有人可以帮忙吗?
当使用反引号(在perl中)时,我似乎与大括号扩展有某种不一致
print `ls -d ~/{a,b}`;
Run Code Online (Sandbox Code Playgroud)
工作正常,但当我尝试
print `ls -d ~/{a}`;
Run Code Online (Sandbox Code Playgroud)
我明白了:
Run Code Online (Sandbox Code Playgroud)ls: cannot access /home/user/{a}: No such file or directory
我尝试了各种引用,间距和逃脱但无济于事.我的问题是,有没有办法强制扩张?我意识到如果我自己动起来,我可以一起避免这个问题,但我对这种行为感到好奇
我在bash和tcsh下试过这个.当直接在tcsh下使用时,该命令有效,但在bash下则没有