在对最近问题的评论中,Stéphane Chazelas 提到双括号算术存在安全隐患,例如:
x=$((1-$x))
Run Code Online (Sandbox Code Playgroud)
在大多数贝壳上。
我的谷歌技能似乎生疏了,我找不到任何东西。双括号算术的安全含义是什么?
在 bash 中,带有一元测试的条件表达式-v myvariable测试变量是否myvariable已设置。请注意,myvariable不应通过在其前面加上美元前缀来扩展,因此不是 $myvariable。\n现在我发现对于数组元素,条件表达式-v myarray[index]也可以很好地工作,无需完整的扩展语法${myarray[$index]}。尝试这个:
myarray[2]=myvalue\n for i in 1 2 3\n do\n [ -v myarray\\[i] ] && echo element $i is set\n done\nRun Code Online (Sandbox Code Playgroud)\n(注意转义\\[以防止通配符,作为使用引号的替代方法)
给出所需的输出:
\n element 2 is set\nRun Code Online (Sandbox Code Playgroud)\n问题\n这种行为可以安全使用吗?又名是这种已记录的行为吗?
\n附录\n阅读答案后https://unix.stackexchange.com/a/677920/376817后,我扩展了我的示例:
\n myarray[1]=val myarray[2]=val myarray[3]=val myarray[4]=val myarray[5]=val myarray[6]="" myarray[2]=""\n unset myarray[3] myarray[4] myarray[5]\n touch myarray4 myarrayi\n myarray4=val myarrayi=val\nRun Code Online (Sandbox Code Playgroud)\n然后
\n for …Run Code Online (Sandbox Code Playgroud) 我想检查一个字符串是否不止一次包含一个字母(不是一个特定的字母,实际上是任何字母)。
例如:
用户:
test.sh this list
Run Code Online (Sandbox Code Playgroud)
脚本:
if [ "$1" has some letter more then once ]
then
do something
fi
Run Code Online (Sandbox Code Playgroud) 我试图在我的 shell 中批量重命名一堆文件,即使互联网上有很多关于它的材料,我似乎无法找到适合我的特定情况的解决方案。
我有一堆具有(似乎是)“时间戳 ID”的文件:
abc_128390.png
abc_138493.png
abc_159084.png
...
Run Code Online (Sandbox Code Playgroud)
我想换一个柜台:
abc_001.png
abc_002.png
abc_003.png
...
Run Code Online (Sandbox Code Playgroud)
我(很多)天真的方法是这样的:
mv abc_*.png abc_{001..123}.png
另外,我想不出一种方法让它与for-loop 一起工作。
不幸的rename是,FWIW在这个特定系统上不可用。
任何建议将不胜感激!
我试图将存储在变量中的字符串与三个不同的字符串进行比较,如果它们都不匹配,则抛出错误。我尝试使用逻辑运算符 OR 在单个 if 语句中执行此操作。但是每次我收到错误时,即使存储在变量中的值与可能的值之一相同。请找到我尝试过的片段。
if [[ "$TYPE" != "LOCAL" || "$TYPE" != "REMOTE" || "$TYPE" != "BOTH" ]]; then
echo -e "\n\tINCORRECT OR NULL ARGUMENTS PASSED. PLEASE VERIFY AND CORRECT THE USAGE MENTIONED AS BELOW: \n"
Usage
exit 1
fi
if [[ "$TYPE" != "LOCAL" ]] || [["$TYPE" != "REMOTE" ]] || [["$TYPE" != "BOTH" ]]; then
echo -e "\n\tINCORRECT OR NULL ARGUMENTS PASSED. PLEASE VERIFY AND CORRECT THE USAGE MENTIONED AS BELOW: \n"
Usage
exit 1
fi
Run Code Online (Sandbox Code Playgroud)