簡體   English   中英

Bash變量在OSX終端中返回“未找到命令”

[英]Bash variable returns “command not found” in OSX Terminal

我嘗試使用一些變量重命名一些文件,但它失敗了。 我已經嘗試了不同的方式讓它工作,但無濟於事。 據我了解文檔,這是正確的做事方式 - 但是現在我很難過......

這是代碼(如文件rename_prefix.sh ):

 #!/bin/sh
 NEWPREF="LALA"
 OLDPREF="LULU"
 for f in $OLDPREF*; do mv $f $(echo $f | sed 's/^$OLDPREF/$NEWPREF/g'); done

這是錯誤消息:

 usage: mv [-f | -i | -n] [-v] source target
   mv [-f | -i | -n] [-v] source ... directory

最初我認為問題在於使用我認為是正則表達式的變量,但從錯誤消息中可以看出,問題在於首先聲明變量的地方。

這里發生了什么?

這可以完全在shell中完成,這也避免了為sed替換模式轉義元字符的可能問題。 它也非常快,因為它為每個重命名的文件節省了兩個叉子。

NEWPREF="LALA"
OLDPREF="LULU"
for f in "$OLDPREF"*; do
   mv "$f" "$NEWPREF${f#$OLDPREF}"
done

如果您想了解有關從shell變量值中刪除后綴和前綴的更多信息,請閱讀有關參數擴展POSIX規范 (所有zsh,ksh,mksh和bash都支持)。

PS:你可以獲得像rename_prefix.sh: line 2: NEWPREF: command not found這樣的錯誤的唯一方法rename_prefix.sh: line 2: NEWPREF: command not found如果你在NEWPREF之后和=之前有空格。 它看起來非常像您發布的程序並不完全是您運行的程序。 你輸入它而不是cut'n'paste嗎?

好吧,假設您不需要POSIX,並猜測某些其他細節,這里應用了一般修正的相同內容。

#!/bin/bash
newpref=LALA
oldpref=LULU

shopt -s nullglob

for f in "$oldperf"*; do
    mv -- "$f" "${f/#"$oldpref"/$newpref}"
done

或POSIX

#!/bin/sh
newpref=LALA
oldpref=LULU

for f in "$oldpref"*; do
    [ -e "$f" ] || break
    mv -- "$f" "${newpref}${f#"$oldpref"}"
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM